【问题标题】:Dynamic configs with Structuremap使用 Structuremap 进行动态配置
【发布时间】:2011-11-25 14:04:57
【问题描述】:

这就是我想用 Structuremap 完成的任务。


在我们每次请求时,我们客户端中使用的数据库连接字符串和 Web 服务 url 都会根据某些业务逻辑而有所不同。目前,我们的 sql 和 Web 服务客户端实现在其构造函数中接收配置。

我想使用配置文件,却发现无法按请求使用它们。

在我们的团队中,我们正在就两种解决方案进行辩论:


1-将配置工厂传递到可以解析要使用的配置的注册表中 当容器需要实例化某些东西时。

  • 我看到的问题是我们可能不得不使用 HttpContext.Items,因为大多数应用程序对象都没有在结构映射中实例化,而且似乎很难从工厂中获取当前的请求上下文。


2- 为每个不同的配置实例化容器,并根据业务逻辑决定使用哪个容器。

  • 我看到的问题是加载时间、内存消耗以及对象的生命周期。所以,我在这里似乎没有发现任何真正的问题,我觉得拥有多个容器是不对的。



1-您是否看到其他问题?

2- 有更好的主意吗?

3- 你会选择哪一个?


谢谢

编辑

而且似乎很难从工厂中获取当前的请求上下文。

我不是指HttpContext,我指的是请求数据。对于这个应用,它是一个 wcf 请求对象。

【问题讨论】:

  • 只有配置值不同吗?或者您是否需要根据 Web 请求更改实现类?

标签: inversion-of-control ioc-container structuremap


【解决方案1】:

似乎很难从工厂中获取当前的请求上下文。

不知道为什么会这样。以下不会解决问题吗?

 ObjectFactory.Configure(config => {
            config.For<HttpContextBase>()
                .Use(() => { return new HttpContextWrapper(HttpContext.Current); });
            config.For<Service>().Use<Service>();
        });
        var service = ObjectFactory.GetInstance<Service>();

 public class ConfigurationFactory
    {
        public ConfigurationFactory(System.Web.HttpContextBase context)
        {

        }
    }


    public class Service
    {
        public Service(ConfigurationFactory Configuration)
        {

        }
    }

【讨论】:

  • 我的错,请求不是直接asp.net请求,而是自定义请求类的WCF请求。
猜你喜欢
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多