c# - 如何配置 Ninject 以便它根据先前注入(inject)的实例注入(inject)正确的实例

标签 c# dependency-injection ioc-container ninject ninject-2

我找不到合适的词来回答我的问题,所以我会让我的代码来代替。

我有存储库:

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/

相关文章:

c# - PostScript - 使用 Ghostscript "pdfwrite"时出错

asp.net-core - .NET 6 IHubContext 依赖注入(inject)

dependency-injection - 在 xunit 中实例化 IOptions<>

python - 将 fastapi 与 plotly.dash 结合并将 token 依赖项添加为 auth 的问题

c# - 就地交集两个不同类型的集合

c# - 使用存在的 EF 查询抛出内存不足异常

java - 创建 bean 时出错,无法将新的 LinkedBlockingQueue 作为构造函数注入(inject)到 ThreadPoolExecutor

c# - 是否可以使用反序列化进行构造函数注入(inject)?

c# - Java 和 C# 中二进制文件的最佳编码解码

.net - 为什么我不能用 Ninjects ConstructorArgument 注入(inject) null 值?