使用微軟統一註冊我以下類型:ASP.NET MVC 3 - 依賴解析器問題當更換公共服務定位器
container.RegisterType(typeof(IRepository<>), typeof(NHibernateRepository<>));
在ASP.NET MVC 2的話,我可以做到以下幾點:
var repository = ServiceLocator.Current
.GetInstance(typeof(IRepository<>).MakeGenericType(bindingContext.ModelType));
但是在版本3中,我已經刪除了服務定位器的所有出現,並實現了新的依賴關係解析器。因此,我將上述內容更改爲:
var repository = DependencyResolver.Current
.GetService(typeof(IRepository<>).MakeGenericType(bindingContext.ModelType));
但是,現在返回null。
這是我實現依賴解析器的,如果有幫助:
public class UnityDependencyResolver : IDependencyResolver {
private readonly IUnityContainer _container;
public UnityDependencyResolver(IUnityContainer container) {
_container = container;
}
public object GetService(Type serviceType) {
return typeof(IController).IsAssignableFrom(serviceType) ||
_container.IsRegistered(serviceType) ?
_container.Resolve(serviceType) : null;
}
public IEnumerable<object> GetServices(Type serviceType) {
return _container.ResolveAll(serviceType);
}
}
我會很感激,如果有人能告訴我什麼,我做錯了。謝謝
你調試過'GetService'調用嗎?它看起來像你可以以非常特殊的方式返回null。 – Tejs
嗨,感謝,它調用_container.IsRegistered(serviceType)返回null。如果我從GetService方法中刪除條件語句並將其包裝在try catch中(如果拋出異常,則返回null),它工作正常,但理想情況下,我想刪除try/catch,因爲它看起來有點亂。 – nfplee