使用 Microsoft Unity 我注册了以下类型:
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。
如果有帮助,这是我对 Dependency Resolver 的实现:
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);
}
}
如果有人能告诉我我做错了什么,我将不胜感激。谢谢