AutoFac / .NET Core - 注册DBcontext?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (3)
  • 关注 (0)
  • 查看 (579)

我有一个新的.NET Core Web API项目,它具有以下项目结构:

API - >业务/域 - >基础架构

仅使用API​​方法,API非常薄。业务/域层具有我的所有业务逻辑。最后,我的Infrastructure层使用EF Core 2.0创建了我的DB类。

我知道使用.NET Core内置依赖注入我可以将API项目的引用添加到Infrastructure项目,然后在StartUp.cs文件中添加以下代码:

services.AddDbContext<MyContext>(options => options.UseSqlServer(connectionString));

但是,我想保持更传统的关注点分离。到目前为止,我在我的Infrastructure层添加了一个模块,它试图进行如下注册:

builder.Register(c =>
        {
            var config = c.Resolve<IConfiguration>();

            var opt = new DbContextOptionsBuilder<MyContext>();
            opt.UseSqlServer(config.GetSection("ConnectionStrings:MyConnection:ConnectionString").Value);

            return new MyContext(opt.Options);
        }).AsImplementedInterfaces().InstancePerLifetimeScope();

但是,DBContext没有注册。尝试访问注入的DBContext的任何类都无法解析该参数。

有没有办法在.NET Core Web API项目中使用AuftoFac在单独的项目中注册DBContext?

提问于
用户回答回答于

我认为问题是你正在尝试注册MyContext()使用AsImplementedInterfaces()。这不是DbContext通常如何注册的方式。您应该注册并解决类本身。

用户回答回答于

请问你这个问题解决没,我碰到了同样的问题

用户回答回答于

在所需的项目中,您可以创建一个扩展方法,将方法添加到集合中

public static class MyDataExtensions {
    public static IServiceCollection AddMyData(this IServiceCollection services) {
        //...

        services.AddDbContext<MyContext>(options => options.UseSqlServer(connectionString));

        //...
    }
}

然后在你的启动时,只需要调用从另一个项目公开的扩展

services.AddMyData();

//...other settings

API项目是组合根,因此无论如何它需要知道所有相关的依赖项。至少使用此扩展,您不必直接引用已使用的db上下文,

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励