从这里我了解了如何指定一个组件,但是如果该组件实现了一个本身在容器中解析的接口呢?
我使用三个接口IDBViewerModel
:IMembershipModel
和IMongoConnection
。我希望解决IDBViewerModel
toDBViewerModel
和IMembershipModel
to MembershipModel
。很容易。
但是,两者都DBViewerModel
和MembershipModel
期望IMongoConnection
作为构造函数注入组件-并且这两个组件不相同,因此我想使用服务覆盖。
我的例子如下。whereDBViewerModel : IDBViewerModel
和构造函数期望注入的组件看起来像:MembershipModel : IMembershipModel,
DBViewerModel
MembershipModel
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。已经有一个具有该名称的组件。您是否想修改现有组件?如果不是,请确保指定一个唯一名称。