2012-02-15 12 views
0

我想使用Unity作爲ASP.NET MVC 3應用程序的IoC容器,但是我的UnityDependecyResolver類遇到問題。目前,它看起來像這樣(從網路上的複製,因爲我不認爲團結本身自帶這個):Unity的IDependencyResolver實現中的GetService方法應該如何?

public class UnityDependencyResolver : IDependencyResolver 
{ 
    readonly IUnityContainer _container; 
    public UnityDependencyResolver(IUnityContainer container) 
    { 
     this._container = container; 
    } 
    public object GetService(Type serviceType) 
    { 
     try 
     { 
      return _container.Resolve(serviceType); 
     } 
     catch 
     { 
      return null; 
     } 
    } 
    public IEnumerable<object> GetServices(Type serviceType) 
    { 
     try 
     { 
      return _container.ResolveAll(serviceType); 
     } 
     catch 
     { 
      return new List<object>(); 
     } 
    } 
} 

不過,我在嘗試訪問任何控制器時,這種運行時錯誤:

IControllerFactory的「System.Web.Mvc.DefaultControllerFactory」未返回名稱爲「Account」的控制器。

This StructureMap article建議我應該修改GetService方法,但是,我是很新的MVC兩者統一,我不知道應該如何準確樣子。

回答

0

這是我的實現,對我來說工作

public class UnityResolver : IDependencyResolver 
    { 

     private readonly IUnityContainer _container; 

     public UnityResolver(IUnityContainer container) 
     { 
      _container = container; 
     } 

     public object GetService(Type serviceType) 
     { 
      if (typeof(IController).IsAssignableFrom(serviceType)) 
      { 
       return _container.CreateChildContainer().Resolve(serviceType); 
      } 

      if (_container.IsRegistered(serviceType)) 
      { 
       return _container.CreateChildContainer().Resolve(serviceType); 
      } 
      return null; 
     } 

     public IEnumerable<object> GetServices(Type serviceType) 
     { 
      return _container.CreateChildContainer().ResolveAll(serviceType); 
     } 

    } 
相關問題