从这里我了解了如何指定一个组件,但是如果该组件实现了一个本身在容器中解析的接口呢?
我使用三个接口IDBViewerModel:IMembershipModel和IMongoConnection。我希望解决IDBViewerModeltoDBViewerModel和IMembershipModelto MembershipModel。很容易。
但是,两者都DBViewerModel和MembershipModel期望IMongoConnection作为构造函数注入组件-并且这两个组件不相同,因此我想使用服务覆盖。
我的例子如下。whereDBViewerModel : IDBViewerModel和构造函数期望注入的组件看起来像:MembershipModel : IMembershipModel,DBViewerModelMembershipModel
DBViewerModel(IMongoConnection uaxDB)
MembershipModel(IMongoConnection dataDB)
现在我有MongoConnection : IMongoConnection并且MongoConnection看起来像:
public MongoConnection(string DBlocation, string DB)
我希望以不同的方式提供 DBlocation 和 DB 参数,以便将MongoConnection组件注入DBViewerModel和MembershipModel. 所以我尝试:
container.Register(Component
.For<IDBViewerModel>()
.ImplementedBy<DBViewerModel>()
.LifeStyle.PerWebRequest);
container.Register(Component
.For<IMembershipModel>()
.ImplementedBy<MembershipModel>()
.LifeStyle.PerWebRequest);
container.Register(
Component.For<IMongoConnection>()
.ImplementedBy<MongoConnection>()
.Named("myservice.dataDB")
.DependsOn(Property.ForKey("DBlocation").Eq(USERmongoURL),
Property.ForKey("DB").Eq(USERmongoCollection))
.LifeStyle.PerWebRequest,
Component.For<IMongoConnection>()
.ImplementedBy<MongoConnection>()
.Named("myservice.uaxDB")
.DependsOn(Property.ForKey("DBlocation").Eq(UAXmongoURL),
Property.ForKey("DB").Eq(UAXmongoCollection))
.LifeStyle.PerWebRequest,
Component.For<DBViewerModel>()
.ServiceOverrides(ServiceOverride.ForKey("dataDB").Eq("myservice.dataDB")),
Component.For<MembershipModel>()
.ServiceOverrides(ServiceOverride.ForKey("uaxDB").Eq("myservice.uaxDB"))
);
我的错误信息说明了一切——但我不知道如何正确解决我的依赖链:
无法注册组件 DBViewerModel。已经有一个具有该名称的组件。您是否想修改现有组件?如果不是,请确保指定一个唯一名称。