c#-4.0 - Autofac在运行时解析参数

标签 c#-4.0 connection-string autofac

让我们直说吧。 我有这样的接口(interface)和类:

public interface IDataBase
{
    DataTable GetSomeTableData();
}

我的类(class):

public class DataBase : IDataBase    
{
    private readonly string _connectionString;

    public DataBase(string connectionString)
    {
        this._connectionString = connectionString;
    }

    public DataTable GetSomeTableData()
    {
        using (SqlConnection cn = new SqlConnection(_connectionString))
        {
             cn.Open();
             // some select
        }
    }
}

我正在使用 Autofac 来注入(inject)该类:

var builder = new ContainerBuilder();
builder.RegisterType<DataBase>().As<IDataBase>).WithParameter("connectionString", "my connection string");
var container = builder.Build();
var database = container.Resolve<IDataBase>();
var tableData1 = database.GetSomeTableData();
// change connection string ?????????????????
var tableData2 = database.GetSomeTableData();

我需要从一个数据库和另一个数据库获取表数据。注册类后如何更改连接字符串?你可以再举一个例子..

最佳答案

很多方法可以做到这一点。一种方法是创建并注入(inject)服务,而不仅仅是普通的连接字符串。

public interface IConnectionStringProvider
{
    public string ConnectionString { get; set }
}

public class ConnectionStringProvider
{
    public string ConnectionString { get; set }
}


var builder = new ContainerBuilder();
builder.RegisterType<DataBase>()
    .As<IDataBase>);
builder.RegisterType<ConnectionStringProvider>)
    .As<IConnectionStringProvider>
    .SingleInstance();

var container = builder.Build();
var database = container.Resolve<IDataBase>();
var connStringProvider = container.Resolve<IConnectionStringProvider>();
var tableData1 = database.GetSomeTableData();
connStringProvider.ConnectionString = "...";
var tableData2 = database.GetSomeTableData();

数据库将使用该服务:

public class DataBase : IDataBase    
{
    private readonly IConnectionStringProvider _connectionStringProvider;

    public DataBase(IConnectionStringProvider connectionStringProvider)
    {
        this._connectionStringProvider = connectionStringProvider;
    }

    public DataTable GetSomeTableData()
    {
        using (SqlConnection cn = new SqlConnection(_connectionStringProvider.ConnectionString))
        {
             cn.Open();
             // some select
        }
    }
}

关于c#-4.0 - Autofac在运行时解析参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25602500/

相关文章:

c# - MS SQL 数据库作为 C#、MVC Entity Framework 应用程序的服务连接字符串

c# - DependencyResolutionException 检测到循环组件依赖性 : How to use Autofac to inject decorator?

.net:从Excel工作表动态生成SQL数据库中的表

c# - 使用动态类型

c# - 如何使用 C# 访问 SQLite?

C# Windows 窗体 : SqlConnection keyword not supported, 连接超时

asp.net - 带有 ASP.Identity 的 AutoFac

c# - 方法注入(inject)(DI、.NET、IOC)

c#-4.0 - 如何在 C# 4.0 中创建静态类的属性

linq - 如何使用 linq/lambda 计算具有唯一属性的列表中的对象数?