[英]Using EF stores in an ASP.NET project without EF Core reference?
将默认ASP.NET标识与EF Core结合使用的推荐方法是将以下内容放入ASP.NET应用程序的Startup
类的ConfigureServices
方法中:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
这需要AddEntityFrameworkStores
似乎不属于ASP.NET Web项目(表示层项目)的东西:对EF Core的引用(以获取AddEntityFrameworkStores
扩展方法),以及对ApplicationDbContext
的引用(我d认为应该在持久层的数据访问代码内部)。
在仍然使用此配置作为我的网站身份的同时,如何避免这些引用并适当地分离关注点?
值得注意的是,在.NET Core中,引用是可传递的。 这意味着,如果WebProj
引用BLLProj
和BLLProj
引用DALProj
:
WebProj -> BLLProj -> DALProj
然后WebProj
仍然从DALProj
获取所有引用。
话虽如此,您可以使用AddDbContext
扩展方法在代码中起作用的相同方式,将此配置委派给数据项目。 这意味着该Web项目将没有任何直接引用到任何DAL对象。
例如,在您的BLL层甚至是一个完全独立的项目中,您都可以使用扩展方法将服务添加到DI容器中,例如:
public static class ServiceCollectionExtensions
{
public static void AddDataAndIdentity(this IServiceCollection services, IConfiguration config)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
config.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
}
}
并在您的Web项目中,在ConfigureServices
方法中调用它:
services.AddDataAndIdentity(Configuration);
此外,还有一些工具可以帮助您可视化项目依赖性。 如果您拥有Visual Studio Enterprise版本,则可以创建一个代码映射 。 其他工具(例如ReSharper)也可以提供帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.