我已经将我的EF相关代码放在类库中并在asp.net webapi项目中使用它。 但是我的webapi项目中仍然有以下代码。
const functions = require('firebase-functions')
const gcs = require('@google-cloud/storage')({
keyFilename: functions.config().admin.key
})
有没有办法解耦MyOwnDbContext:DbContext'完全来自webapi项目的类(使用工厂或接口)。或者这是一个不必要的关注?我只是不想在两个项目中使用EF相关库。
答案 0 :(得分:2)
我会不管它,因为您仍然必须在入口项目中安装Entity Framework,以便库可以使用它(或通过手动复制文件来破解方法,但让我们不要进入)。
然而,这是我在最近的一个项目中所做的,我希望将所有服务保存在一个地方,与Startup类不同:
Microsoft.Extensions.DependencyInjection
安装到您想要DbContext的项目。添加以下内容:
public static class Injector
{
// you probably want to pass the connection string or an Options class here too
public static IServiceCollection Inject(this IServiceCollection services)
{
services.AddDbContext<...>(...);
return services;
}
}
注入它,而不是上下文本身:
public void Configure(IServiceCollection services)
{
services.Inject();
// and whatever else you need
services.AddMvc();
}
像这样,你不会赢得很多,但你可以像我刚才提到的那样继续前进。
答案 1 :(得分:0)
这是一个不必要的问题。您将其放入应用程序的根目录(Startup.cs)。这里的一切都是硬连线的(依赖注入容器,上下文,记录,......)。
事实上,没有比这更好的地方了。因为上下文本身的配置与应用程序级别以下的任何层无关。您的DAL /存储库只使用已配置的上下文及其。