Я пытаюсь настроить DI для нового сайта ASP.NET Core, и у меня есть этот код:
public void ConfigureServices(IServiceCollection services)
{
services
.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
// Get the configuration from the app settings.
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
// Get app settings to configure things accordingly.
var appSettings = Configuration.GetSection("AppSettings");
var settings = new AppSettings();
appSettings.Bind(settings);
services
.AddOptions()
.Configure<AppSettings>(appSettings)
.AddSingleton<IConfigurationRoot>(config)
.AddDbContext<MyDbContext>(builder =>
{
builder.UseSqlServer(config.GetConnectionString("myConn"));
}, ServiceLifetime.Transient, ServiceLifetime.Transient);
services.AddSingleton<ILoadTestCleanUpServiceRepository, LoadTestCleanUpServiceRepository>();
...
Теперь LoadTestCleanUpServiceRepository
зависит от MyDbContext
:
public class LoadTestCleanUpServiceRepository : ILoadTestCleanUpServiceRepository
{
private readonly MyDbContext _dbContext;
public LoadTestCleanUpServiceRepository(MyDbContext dbContext)
{
_dbContext = dbContext;
}
...
.. и контекст БД выглядит так:
public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> ctxOptions) : base(ctxOptions)
{
}
}
При запуске приложения я получаю эту ошибку:
InvalidOperationException: Невозможно разрешить службу для типа«MyCode.Infrastructure.Common.MyDbContext» при попытке активировать «MyCode.Infrastructure.LoadTestCleanUpService.LoadTestCleanUpServiceRepository».
Я попытался изменить ServiceLifetime
параметры и добавив этот дополнительный код:
services.AddTransient<MyDbContext>(sp => new MyDbContext(config));
... но, похоже, ничего не помогает, и я не могу понять, почему это не работает.Он пытается создать хранилище, но почему он не может также создать контекст БД?Это даже не доходит до того, что я звоню UseSqlServer()
!Есть идеи?
ОБНОВЛЕНИЕ 1:
Хмм ... Теперь я вижу это.Скорее всего это связано:
ОБНОВЛЕНИЕ 2:
У меня сейчас:
- Заменен EF 6 на Microsoft.EntityFrameworkCore.SqlServer
- Обновлен до целевой платформы netcoreapp2.2 для решения некоторых конфликтующих версий сборки.
- Сделал область репозитория.
Но я все еще получаю ту же ошибку.