[英]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.