StructureMap配置
在SM中是否有办法仅在请求期间动态注入属性值,然后在请求完成后将这些属性设置回默认值?
我在HttpRequest上下文中特别提到。
我有一个IDBAccessor接口和一个DBAccessor具体实现。
IDBAccessor具有连接字符串的公共属性。
我想根据传入的某个参数为每个HttpRequest动态设置连接字符串。
这是否容易实现?
感谢您的投入。
答案 0 :(得分:0)
我假设您有一个类,它封装逻辑以确定每个请求的连接字符串。我称之为ConnectionStringSource
。然后,您可以像这样配置StructureMap:
ObjectFactory.Initialize(x =>
{
x.For<IDBAccessor>().HybridHttpOrThreadLocalScoped()
.Use(ctx =>
{
var connectionString = ctx.GetInstance<ConnectionStringSource>().GetConnectionString();
var dbAccessor = new DBAccessor {ConnectionString = connectionString};
return dbAccessor;
});
});
public class ConnectionStringSource
{
public string GetConnectionString()
{
// determine the connection string somehow
return "connection string";
}
}
HybridHttpOrThreadLocalScoped
调用将确保为每个HTTP请求获取DBAccessor
的新实例。通过使用Func<>
的{{1}}重载,您可以执行代码以在每个请求期间确定和设置连接字符串。
注意:您可能只想使连接字符串成为DBAccessor的构造函数参数,而不是使其成为接口上的属性。