[英]How to remove dependency from EntityFrameworkCore 3 in ASP.NET core 3.1
我的 EF-Core 數據庫訪問層和 ASP.NET Core 應用程序在不同的項目中。 我正在嘗試將數據庫訪問層連接到 Web 應用程序並附帶代碼
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 庫的依賴。 如何將 Web 應用程序外部的 DI 接線移動到數據庫項目中?
我在帶有 Unity DI 的 ASP.NET MVC(不是核心)項目中使用了類似的方法,有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);
}
}
ASP.NET web 項目中的 DI 接線,不依賴於 EF
UnityContainer.AddExtension(new SharedUnityRegistry(lifetimeManager => new HierarchicalLifetimeManager()));
您可以為此使用擴展方法並將其放置在您的數據庫項目中。 但是您仍然需要引用您的數據庫項目。
數據庫項目:
public static class Extensions
{
public static IServiceCollection UseMyDatabase(this IServiceCollection services, string connectionString)
{
services.AddDbContext<DatabaseContext>(options => options.UseSqlServer(connectionString));
return services;
}
}
啟動.cs:
services.UseMyDatabase(Configuration.GetConnectionString("Connection"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.