运行时中的Autofac解析参数

曼特维达斯·奥泽伦斯基斯

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

public interface IDataBase
{
    DataTable GetSomeTableData();
}

我的课:

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注入该类:

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();

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

雅西克·高根(JacekGorgoń)

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

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
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Autofac运行时参数

来自分类Dev

Autofac-解决运行时参数而不必传递容器

来自分类Dev

在运行时中删除标签

来自分类Dev

在运行时中删除标签

来自分类Dev

Windows运行时中的页面状态

来自分类Dev

如何确定是否在Mono运行时中运行

来自分类Dev

在运行时解析隐式参数

来自分类Dev

jenkinsfile参数名称在运行时解析

来自分类Dev

在运行时解析隐式参数

来自分类Dev

JavaScript运行时中的微任务和宏任务

来自分类Dev

Java运行时中的链接是否总是动态完成?

来自分类Dev

在@ManyToMany休眠关系的运行时中更改获取类型

来自分类Dev

如何在GAE go运行时中记录消息?

来自分类Dev

Access 2013运行时中未显示启动表单

来自分类Dev

MS Access运行时中的Debug.Assert行为

来自分类Dev

在Kotlin运行时中更改字段名称

来自分类Dev

如何在Python中运行时中断函数

来自分类Dev

销毁在运行时中创建的TADODataset

来自分类Dev

Android运行时中的水平和垂直ScrollView

来自分类Dev

获取OSGi运行时中已安装的包的InputStream?

来自分类Dev

如何从RMI运行时中删除远程对象

来自分类Dev

JavaScript运行时中的微任务和宏任务

来自分类Dev

尝试基于运行时在autofac中传递的通用类型解析接口实现

来自分类Dev

如何在 Web API 中使用 AutoFac 在运行时解析服务?

来自分类Dev

运行时的意图参数

来自分类Dev

Autofac-解决运行时参数而无需传递容器

来自分类Dev

如何在另一个Tokio运行时中创建Tokio运行时而不会收到错误“无法从运行时中启动运行时”?

来自分类Dev

运行时动态功能解析

来自分类Dev

Webpack运行时条件模块解析