Ninject 提供者 -> 在提供者内部获取另一个依赖项
Ninject Providers -> Get another dependency inside the provider
我想知道这里有哪些最佳做法。
我需要为我的多租户应用程序构建一个 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 来解决租户依赖关系,但我不确定该怎么做?
这有点尴尬,但我想如果它发生在我身上,也可能发生在其他人身上。
我忘了包含 using Ninject
,这就是扩展方法 context.Kernel.Get
没有出现在 IntelliSense 中的原因。
所以我的代码最终看起来像这样:
using Ninject;
public class TenantContextFactoryProvider : Provider<DbContext>
{
protected override DbContext CreateInstance(IContext context)
{
var tenant = context.Kernel.Get<ITenant>();
return new DbContext(tenant.ConnectionString);
}
}
虽然服务定位器确实有效,但构造函数注入是另一种选择。
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);
}
}
我想知道这里有哪些最佳做法。 我需要为我的多租户应用程序构建一个 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 来解决租户依赖关系,但我不确定该怎么做?
这有点尴尬,但我想如果它发生在我身上,也可能发生在其他人身上。
我忘了包含 using Ninject
,这就是扩展方法 context.Kernel.Get
没有出现在 IntelliSense 中的原因。
所以我的代码最终看起来像这样:
using Ninject;
public class TenantContextFactoryProvider : Provider<DbContext>
{
protected override DbContext CreateInstance(IContext context)
{
var tenant = context.Kernel.Get<ITenant>();
return new DbContext(tenant.ConnectionString);
}
}
虽然服务定位器确实有效,但构造函数注入是另一种选择。
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);
}
}