每个HttpRequest的StructureMap动态集属性

时间:2010-06-25 22:18:30

标签: structuremap

StructureMap配置

在SM中是否有办法仅在请求期间动态注入属性值,然后在请求完成后将这些属性设置回默认值?

我在HttpRequest上下文中特别提到。

我有一个IDBAccessor接口和一个DBAccessor具体实现。

IDBAccessor具有连接字符串的公共属性。

我想根据传入的某个参数为每个HttpRequest动态设置连接字符串。

这是否容易实现?

感谢您的投入。

1 个答案:

答案 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的构造函数参数,而不是使其成为接口上的属性。