Мой уровень доступа к базе данных EF-Core и ASP. NET Базовое приложение находятся в разных проектах. Я пытаюсь подключить слой доступа к базе данных к веб-приложению и получить код
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<DatabaseContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("Connection")));
services.AddScoped<IMyDbContext, DatabaseContext>();
services.AddScoped<IUserService, UserService>();
services.AddScoped<IPlanService, PlanService>();
services.AddControllersWithViews();
}
К сожалению, это добавляет зависимость от библиотеки EntityFrameworkCore. Как перенести DI-подключение вне веб-приложения в проект базы данных?
Я использовал аналогичный подход в ASP. NET MVC (не Core) проекте с Unity DI, был UnityContainerExtension
класс для этого. Мой старый пример
DI-подключение в слое базы данных
public class SharedUnityRegistry : UnityContainerExtension
{
private readonly Func<Type, LifetimeManager> _lifeTimeManager;
public SharedUnityRegistry(Func<Type, LifetimeManager> lifetimeManager)
{
_lifeTimeManager = lifetimeManager;
}
protected override void Initialize()
{
Container.RegisterTypes(
AllClasses.FromLoadedAssemblies().Where(type => typeof(DatabaseContext).IsAssignableFrom(type)),
WithMappings.FromAllInterfaces,
WithName.Default,
_lifeTimeManager);
}
}
DI-подключение в ASP. NET веб-проекте, без зависимости от EF
UnityContainer.AddExtension(new SharedUnityRegistry(lifetimeManager => new HierarchicalLifetimeManager()));