Microsoft Unity を使用して、次のタイプを登録します。
container.RegisterType(typeof(IRepository<>), typeof(NHibernateRepository<>));
ASP.NET MVC 2 では、次のことができます。
var repository = ServiceLocator.Current
.GetInstance(typeof(IRepository<>).MakeGenericType(bindingContext.ModelType));
しかし、バージョン 3 では、Service Locator をすべて削除し、代わりに新しい Dependency Resolver を実装しました。したがって、上記を次のように変更しました。
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);
}
}
誰かが私が間違ったことを教えてくれたら本当にありがたいです。ありがとう