DbContext解耦

时间:2018-05-22 09:57:22

标签: c# asp.net-core entity-framework-core

我已经将我的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相关库。

2 个答案:

答案 0 :(得分:2)

我会不管它,因为您仍然必须在入口项目中安装Entity Framework,以便库可以使用它(或通过手动复制文件来破解方法,但让我们不要进入)。

然而,这是我在最近的一个项目中所做的,我希望将所有服务保存在一个地方,与Startup类不同:

  1. Microsoft.Extensions.DependencyInjection安装到您想要DbContext的项目。
  2. 添加以下内容:

    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;
        }
    }
    
  3. 注入它,而不是上下文本身:

    public void Configure(IServiceCollection services)
    {
        services.Inject();
    
        // and whatever else you need 
        services.AddMvc();
    }
    
  4. 像这样,你不会赢得很多,但你可以像我刚才提到的那样继续前进。

答案 1 :(得分:0)

这是一个不必要的问题。您将其放入应用程序的根目录(Startup.cs)。这里的一切都是硬连线的(依赖注入容器,上下文,记录,......)。

事实上,没有比这更好的地方了。因为上下文本身的配置与应用程序级别以下的任何层无关。您的DAL /存储库只使用已配置的上下文及其。