繁体   English   中英

如何使用 Autofac 在 N 层 ASP.NET MVC Core 1.0 应用程序中使用连接字符串

[英]How to make the connection string available in a N-Tier ASP.NET MVC Core 1.0 App with Autofac

我通过 autofac modules将层连接在一起。 非常感谢endeffects 这是 HowTo 现在我正在尝试使连接字符串在 DAL 层可用。 我试图注册:

Configuration (Microsoft.Extensions.Configuration)

Startup类但没有任何成功。

我在 startup.cs 的 ConfigureServices 方法中有以下行:

services.AddSingleton(serviceType => Configuration);
services.AddInstance<Microsoft.Extensions.Configuration.IConfiguration>(Configuration);

builder.Populate(services);
var container = builder.Build();
var serviceProvider = container.Resolve<IServiceProvider>();
return serviceProvider;

然后在我的 DAL 中,我通过构造函数注入访问它,例如:

public MyDataContext(IConfiguration configurations)

然后我可以访问该项目并提取我的连接信息,例如:

configurations["Data:MyConnection:ConnectionString"]

我不喜欢我的 DAL 需要知道有关连接字符串名称的任何信息,我认为这不是它的责任的一部分。 我更喜欢创建自己的界面:

因此,例如我会创建类似的东西:

public interface IConnectionSettings
{
  public ConnectionStringSettings DataWarehouse { get; }
  public ConnectionStringSettings Audit { get; }
  public ConnectionStringSettings Logging { get; }
  public ConnectionStringSettings Security { get; }
}

然后当我将实体框架与 DI 一起使用时

public class SecurityContext : DbContext
{
  public SecurityContext(IConnectionSettings settings)
    : base (settings.Name)
  {
  }
}

或 ADO.Net 出于某种奇怪的原因:

public class LoggingDataAccess
{
  private readonly string _connectionString;

  public LoggingDataAccess(IConnectionSettings settings)
  {
    _connectionString = settings.Logging.ConnectionString;
  }

  public void SomeRawAdo()
  {
    using (var con = new Connection(_connnectionstring))
    {
    }
  }
}

在我的 DI 中:

public static class IocCOnfig
{
  public static void Start()
  {
    var builder = new ContainerBuilder();

    builder.Register(r => new ConnectionSettings
    {
      DataWarehouse = ConfigurationManager.ConnectionStrings["DataWarehouse"],
      // etc
    });
  }

  private class ConnectionSettings : IConnectionSettings
  {
    // implement interface...
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM