【问题标题】:ASP.NET MVC and IoC switching configuration settings dynamicallyASP.NET MVC 和 IoC 动态切换配置设置
【发布时间】:2011-05-10 03:44:00
【问题描述】:

我正在寻找一种从使用 Unity IoC 容器的 MVC Web 应用程序动态切换设置的方法。

我有一个在Global.asax.cs 中配置的容器的静态实例

 private static IUnityContainer _container;

 protected void Application_Start()
 {
     AreaRegistration.RegisterAllAreas();
     RegisterRoutes(RouteTable.Routes);
     InitializeUnityContainer(); 
 }

然后是自定义控制器工厂

protected override IController GetControllerInstance(
                       RequestContext reqContext, Type controllerType)
{
    // ... (some argument checking here)

    return _container.Resolve(controllerType) as IController;        
}

我们公司内有不同的团队,他们都使用自己的数据库服务器(具有相同的架构)。管理层建议的解决方案是运行 Web 应用程序的多个实例,因此您可以访问特定团队的任何 URL。我宁愿只运行一个网络应用程序,并让团队选择他们希望应用程序连接到哪个数据库(和其他配置设置)(最好通过下拉菜单或某种类型的菜单)。

不过,我对如何实现这一点感到有些困惑。需要为每个团队配置不同的统一容器(也许我需要多个静态实例?)并且直接在控制器中访问的其他配置设置需要更改。我想这一定是一个比较普遍的问题,有没有标准的解决方案?

【问题讨论】:

  • @Mark 我根本不相信它是重复的。据我了解,我的问题是使用 DI 意味着我的所有连接字符串都固定在 application_start 上。我如何/在哪里可以对字典/用户团队或其他什么进行查找? Unity 正在从对象根注入我的连接字符串。
  • 您需要将运行时值映射到依赖项:stackoverflow.com/questions/1943576/…

标签: asp.net-mvc configuration dependency-injection


【解决方案1】:

我不认为在一个应用程序中托管所有团队会很好地工作 - 你拥有的任何不是请求范围的东西都不会正常工作 - 例如。任何应用程序范围的数据或静态字段都可能导致问题,仅由第一个访问者设置,或不断被覆盖..

最简洁的方法肯定是拥有多个应用程序(即使它们指向同一个代码库)。

【讨论】:

  • 我没有想到,这将是一个很好的解决方案。这是如何实现的?因此,我希望共享所有 DLL、视图、JS 和 CSS 等文件,但使用不同的配置文件(可能还有其他不同的 CSS 文件)。这可能吗?
  • 在 IIS 中,您可以将多个应用程序/站点指向同一个文件夹。如果在 Web.config 中加载不同的配置可能会更加棘手 - 不确定您是否可以根据主机头从另一个文件加载它(如果不能,您可能必须包装您的配置,因此访问它可以检查主机标题)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
相关资源
最近更新 更多