我找不到合适的词来回答我的问题,所以我会让我的代码来代替。
我有存储库:
class Repository
{
public Repository(DbContext ctx)
{
}
}
然后我有这个绑定(bind):
Bind<IRepository>().To<Repository>();
Bind<DbContext>().To<UserStoreContext>().When...
Bind<DbContext>().To<CentralStoreContext>().When...
然后我有需要访问两个数据库的类
class Foo
{
public Repository(IRepository userRepo, [CentralStoreAttribute]IRepository centralRepo)
{
}
}
我应该如何配置两个 DbContext
绑定(bind),以便将具有正确上下文(基于 CentralStoreAttribute)的存储库注入(inject)到 Foo 构造函数中?
最佳答案
我在概念验证中尝试了这一点,但最终走向了不同的方向。
Bind<IRepository>().ToMethod(x =>
{
var repositoryType = x.Kernel
.Get<IConfigObject>()
.SomeStringPropertyDenotingTheRepository;
switch (repositoryType )
{
case "1": return (IRepository)new Repository1();
default: return (IRepository)new Repository2();
}
}).InRequestScope();
虽然它有效,但我从来没有弄清楚它是在使用我的 IObjectB 单例实例还是在实例化一个新实例 - 不过应该很容易弄清楚。我认为每次我在 IRepository 上使用 DI 时它都会调用 ToMethod - 再次未验证。
关于c# - 如何配置 Ninject 以便它根据先前注入(inject)的实例注入(inject)正确的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6373122/