【发布时间】: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