【发布时间】:2015-06-24 12:34:26
【问题描述】:
甚至不确定这是否可以完成,可能需要重新考虑整个事情,但我想在这样做之前我会问。
好的,我有一个带有以下构造函数的存储库类
public Repository(ISessionManager sessionManager, string dbName)
{
this.sessionManager = sessionManager;
this.dbName = dbName;
}
目前在应用程序中任何需要使用存储库的地方,它都会使用依赖注入,并且存储库会像这样在容器中注册。
Component.For<IRepository<User, int>>().ImplementedBy<Repository<User, int>>()
.DependsOn(Dependency.OnValue("dbName", "admin")),
我要做的是将数据库名称的设置提升到将使用存储库的服务的级别。
例如有一个带有构造函数的服务
public SecurityService(ITransactionFactory transactionFactory,
IRepository<User, int> userRepository,
string dbName)
我希望在容器中针对 ServiceService 注册参数 dbName,并在注入参数 userRepository 时传递该值。
因此,如果另一个服务需要使用具有不同数据库的相同存储库,则在注册时会提供一个新名称。
这可能吗?
【问题讨论】:
-
This is a possible solution。否则,您可以为
IRepository创建一个factory,它将dbName 作为参数并将其注入SecurityService,然后使用它手动创建存储库。
标签: c# castle-windsor