Ninject Providers - >在提供程序中获取另一个依赖项

时间:2015-05-02 10:23:12

标签: c# dependency-injection ninject

我想知道这里的最佳做法是什么。 我需要为我的多租户应用程序构建一个DbContext,所以我创建了一个这样的依赖提供程序:

public class TenantContextFactoryProvider : Provider<DbContext>
{
    protected override DbContext CreateInstance(IContext context)
    {
        var tenant = // How to get the tenant through ninject??
        return new DbContext(tenant.ConnectionString);
    }
}

我需要ninject来解决租户依赖关系,但我不知道该怎么做?

2 个答案:

答案 0 :(得分:4)

虽然服务定位器当然有效,但构造函数注入是另一种选择。

public class TenantContextFactoryProvider : Provider<DbContext>
{
    ITenant tenant; 
    public TenantContextFactoryProvider(ITenant tenant)
    {
         this.tenant = tenant;
    }

    protected override DbContext CreateInstance(IContext context)
    {
        return new DbContext(tenant.ConnectionString);
    }
}

答案 1 :(得分:1)

这有点令人尴尬,但我想如果它发生在我身上,也会发生在其他人身上。

我忘了在智能感知中包含using Ninject,这就是扩展方法context.Kernel.Get没有出现的原因。

所以我的代码最终看起来像这样:

using Ninject;
public class TenantContextFactoryProvider : Provider<DbContext>
{
    protected override DbContext CreateInstance(IContext context)
    {
        var tenant = context.Kernel.Get<ITenant>();
        return new DbContext(tenant.ConnectionString);
    }
}