你好,並提前感謝任何幫助。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做一個「共同的」統一的程序集。