【问题标题】:ASP.NET MVC. Autofac and multiple connection stringsASP.NET MVC。 Autofac 和多个连接字符串
【发布时间】:2013-07-08 05:00:14
【问题描述】:

我需要在我的 ASP.NET MVC 应用程序中使用多个连接字符串。我该怎么做?现在我注册连接如下:

builder.RegisterType<SqlConnection>().WithParameter(
    "connectionString",
    WebConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString)
  .InstancePerLifetimeScope()
  .ExternallyOwned();

builder.Register(c => new ContextDataContext(c.Resolve<SqlConnection>())).InstancePerDependency();

【问题讨论】:

    标签: c# autofac


    【解决方案1】:

    您可以按名称注册给定类型的多个实例:

    来自 Autofac 教程:

    builder.Register<OnlineState>().Named<IDeviceState>("online");
    

    要检索命名服务,使用 ResolveNamed() 方法:

    var r = container.ResolveNamed<IDeviceState>("online");
    

    http://autofac.readthedocs.org/en/latest/advanced/keyed-services.html

    【讨论】:

    • 谢谢。你给了我切入点,我决定使用 Keyed 方法。
    【解决方案2】:

    一种方法是创建您自己的连接工厂,并将其注册到 autofac。 比如:

    interface IConnectionFactory{
       SqlConnection CreateConnection(string connectionStringName);
    }
    

    【讨论】:

    • 这应该如何帮助使用多个连接字符串?当需要在使用之前对组件进行自定义初始化时,使用工厂是有意义的。即使它有帮助,它也不是核心问题的答案。 (或者我不明白你打算如何使用它)
    • @kubal5003,他的工厂会根据名字创建一个指定连接字符串的连接,所以他的代码可以调用这个工厂方法来获取需要的连接。
    【解决方案3】:

    您可以在 web.config 的 section 中定义多个连接字符串

    <connectionStrings>
    
        <add name="ProductConnection" providerName="System.Data.SqlClient" connectionString="_YOUR_CONNECTION_STRING_1_"/>
    
        <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="_YOUR_CONNECTION_STRING_2_"/>
    
    </connectionStrings>
    

    在您的代码中,您可以使用类似,

    ConfigurationManager.ConnectionStrings["ProductConnection"] 获取连接字符串。

    如果您想根据连接字符串获取实例,您可以使用任何可以根据连接字符串名称解析您的实例的工厂。 SimpleFactory + UnitySimpleFactory + Autofac 可以帮助您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多