通过接口注册/解析DbContext的正确方法是什么?
上下文:
我有多个Web服务,每个Web服务都具有不同的dbcontext。
由于我需要在共享项目中编写一些通用功能,因此我编写了一个由每个dbcontext实现的接口,因此只需注入dbcontext接口,我就可以拥有一组共享功能“ dbcontext-implementation-agnostic”。 / p>
在每个项目中,每个dbcontext 已经由其实现使用并注入,但是我只想在公共功能项目中使用其接口。
因此,在每个Web服务中,我都会有类似的东西:
services.AddDbContext<IMyDbcontext,MyDbcontext>(options =>
{
options.UseSqlServer(configuration.getconnectionString("MyDbContext"));
});
services.AddTransient<ISharedService,SharedService>();
并在共享项目中
public class SharedService : ISharedService
{
public SharedService(IMydbcontext context)
{
[...]
}
[...]
}
具有IMyDbcontext
就像
public interface IMyDbcontext
{
DbSet<SharedSettings> Settings { get; set; }
int SaveChanges(bool acceptAllChangesOnSuccess);
int SaveChanges();
Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess,CancellationToken cancellationToken = default);
Task<int> SaveChangesAsync(CancellationToken cancellationToken = default);
}
并且我需要Startup.cs中的ISharedService-Configure()with
app.ApplicationServices.GetService<ISharedService>();
我一直在谷歌上搜索很多次,尝试了不同的方法,但是我找不到能起作用的方法...
我尝试使用转发器,例如:(如建议here)
services.AddDbContext<MyDbContext>();
services.AddScoped<IMyDbContext>(provider => provider.GetRequiredService<MyDbContext>());
但是,尽管我没有解决具体的MyDbContext
的问题,但每当尝试解决IMyDbContext
时都会遇到此错误
System.InvalidOperationException:'无法解决 来自根提供商的“ Blah.IMyService”,因为它 需要范围服务 “ Blah.IMydbcontext”。
其中IMyService
已注册为临时地址,其实现构造函数为
public MyService(IMydbcontext context)
我也试图像这样注册dbcontext
services.AddDbContext<IMyDbContext,MyDbContext>();
但是后来,当我尝试解决MyDbContext
时,我得到了null
,我不明白为什么