您好,提前感谢您的帮助。
我有一个关于如何在我的 MVC3 应用程序中构建 Unity 的问题。
目前我已经从这个有用的示例代码中对我的 Unity 实现进行了建模:
http://kevww.wordpress.com/2012/01/04/dependency-injection-with-unity-2-0-in-mvc-3/
我可以让它正常工作,但我问自己是否有稍微不同的方法。本质上,该解决方案需要两个类,第一个是依赖解析器。
public class UnityDependencyResolver : IDependencyResolver
{
IUnityContainer _container;
public UnityDependencyResolver(IUnityContainer container)
{
_container = container;
}
public object GetService(Type serviceType)
{
object instance;
try
{
instance = _container.Resolve(serviceType);
if (serviceType.IsAbstract || serviceType.IsInterface)
{
return null;
}
return instance;
}
catch (Exception e)
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
return _container.ResolveAll(serviceType);
}
}
还有一个 Unity 容器设置类,其设置来自 Global.asax:
public class UnityContainerSetup
{
public static void SetUp()
{
var container = new UnityContainer();
container.RegisterType<ISomeService, SomeService>();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
}
好的,所以我的问题。有没有更好的方法来实际解耦这个 Unity 实现?
我创建了一个单独的项目并将上面的两个类放在其中。在我System.Web.Mvc
在那个新项目中引用来解决IDependencyResolver
.
但是,如果我想重用一个通用程序集来使用来自其他东西的 Unity,例如使用相同存储库和 DAL 的 Web 窗体应用程序,这似乎也没有多大意义。
或者,这只是让 Unity 工作所需的管道吗?即,如果我在我的各种项目中更改了我的 Unity 实现,我将不得不依次访问每个项目?或者我的方法是否适合中间妥协?
对我来说,明显的问题是它IDependencyResolver
是 MVC 的一部分。所以我不确定如何为 MVC 完成统一的“通用”组装。