gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:14:10 26 4
gpt4 key购买 nike

让我们直说吧。我有这样的接口(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com