在我的项目中,我有多个数据库上下文,因此我创建了一个提供程序,用于根据需要获取上下文对象。 我的提供者看起来像这样。
gameObject.transform.right
我创建了一个public class DbContextProvider
{
public Func<accountingContext> accountingDbContextResolver { get; set; }
public Func<activeDirectryContext> activeDirectryDbContextResolver { get; set; }
public accountingContext GetaccountingDbContext() =>
this.accountingDbContextResolver();
public activeDirectryContext GetactiveDirectryDbContext() =>
this.activeDirectryDbContextResolver();
}
类来获取提供程序
ServiceBase
我正在使用简单的注入器,并且需要创建两个数据库上下文的实例。
为了获得实例,我用委托创建了两个静态方法
public class ServiceBase
{
public ServiceBase(DbContextProvider contextProvider)
{
this.ContextProvider = contextProvider;
}
protected DbContextProvider ContextProvider { get; }
public accountingContext accountingDbContext =>
this.ContextProvider.GetaccountingDbContext();
public activeDirectryContext activeDirectryDbContext =>
this.ContextProvider.GetactiveDirectryDbContext();
}
对于注册,我使用了以下代码
private static DbContextProvider CreateactiveDirectryDbContextProvider(Container container)
{
return new DbContextProvider
{
activeDirectryDbContextResolver =
() => container.GetInstance<activeDirectryContext>();
};
}
private static DbContextProvider CreateaccountingDbContextProvider(Container container)
{
return new DbContextProvider
{
accountingDbContextResolver = () => container.GetInstance<accountingContext>();
};
}
如果我运行代码,则出现如下错误
System.InvalidOperationException:'类型DbContextProvider具有 已经注册。如果您打算解决托收问题 的DbContextProvider实现,请使用 Container.Collection.Register重载。有关更多信息,请参见 https://simpleinjector.org/coll1。如果您打算更换 现有注册与此新注册,您可以允许 通过设置覆盖当前注册 Container.Options.AllowOverridingRegistrations为true。欲了解更多 信息,请参阅https://simpleinjector.org/ovrrd。”
但是当我尝试仅使用一种上下文
时,一切工作正常var accountingProvider = CreateaccountingDbContextProvider(container);
container.RegisterInstance(accountingProvider);
var activeDirectryProvider = CreateaccountingDbContextProvider(container);
container.RegisterInstance(activeDirectryProvider);
我尝试使用var accountingProvider = CreateaccountingDbContextProvider(container);
container.RegisterInstance(accountingProvider);
注册它,没有错误出现,但是我没有在服务层中获取实例,那里得到了空引用异常。
有人可以帮我解决这个问题吗?