你好,并提前感谢任何帮助。ASP.NET MVC3和Unity - 从表示层分离Unity实现?
我有一个关于如何在我的MVC3应用程序中构建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);
}
}
而一个统一的容器设置类,具有从Global.asax中称为设置:
public class UnityContainerSetup
{
public static void SetUp()
{
var container = new UnityContainer();
container.RegisterType<ISomeService, SomeService>();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
}
OK,所以我的问题。有没有更好的方法来实际解耦这个Unity实现?
我创建了一个单独的项目,并在其中放置了上面的两个类。在我在新项目中引用System.Web.Mvc
来解决IDependencyResolver
后,它工作正常。
但是,如果我想重新使用常用程序集来从别的方面使用Unity,比如使用同一个存储库和DAL的Web Form应用程序,那么这似乎并没有多大意义。
或者,这只是你需要做的工作让Unity工作?即如果我在各个项目中更改Unity实现,我只需要依次访问每个项目?或者,我的方法可以让中间人妥协吗?
这里我明显的问题是,IDependencyResolver
是MVC的一部分。所以我不确定如何为MVC做一个“共同的”统一的程序集。