簡體   English   中英

ASP.NET MVC3和Unity-將Unity實現與表示層分離?

[英]ASP.NET MVC3 and Unity - Decouple Unity implementation from presentation layer?

您好,在此先感謝您的幫助。

我有一個關於如何在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 Form應用程序,那似乎也沒有多大意義。

或者,這僅僅是使Unity工作所需要做的工作嗎? 也就是說,如果我在各個項目中更改了Unity的實現,我將不得不依次訪問每個項目嗎? 還是我的方法可以妥協?

對我來說,顯而易見的問題是IDependencyResolver是MVC的一部分。 因此,我不確定如何為MVC進行統一的“通用”組裝。

您將始終需要容器設置,但是可以直接創建ControllerFactory並將其注冊到MVC,而不是直接使用DependencyResolver。 有關Unity的示例,請參見此處

這使您可以將所有依賴關系及其分辨率保留在Controller中,並且傳遞給表示層的任何內容都應該是平面模型或簡單的viewdata。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM