3
everyone!使用MVC3解析来自Unity 2.0的命名注册IDependencyResolver
我在使用MVC3 IDependencyResolver从Unity 2.0解析命名注册时遇到问题。
我配置的类型登记为
public class Implementations
{
private IUnityContainer unityContainer;
internal Implementations()
{
this.unityContainer = new UnityContainer();
}
public static IUnityContainer GetUnityContainer()
{
Implementations implementations = new Implementations();
implementations.RegisterImplementations();
return implementations.unityContainer;
}
private void RegisterImplementations()
{
this.unityContainer
.RegisterType<IService, TestService>()
.RegisterType<IService, TestService2>("ts2");
}
}
代码的IDependencyResolver是
public class UnityDependencyResolver : IDependencyResolver
{
IUnityContainer container = null;
string namedRegistration = null;
public UnityDependencyResolver(IUnityContainer container, string name)
{
this.container = container;
this.namedRegistration = name;
}
public object GetService(Type serviceType)
{
try
{
return this.container.Resolve(serviceType, this.namedRegistration);
}
catch
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return this.container.ResolveAll(serviceType);
}
catch
{
return new List<object>();
}
}
}
和方法调用中的Application_Start是
protected void Application_Start()
{
var dependency =
new UnityDependencyResolver(Implementations.GetUnityContainer(), "ts2");
DependencyResolver.SetResolver(dependency);
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
我想这样做,无论是在UnityDependencyResolver或任何其他方式,是解决我的命名实例或默认实例如果命名不存在。当前代码总是解析为默认实例(不命名)。
有没有人有想法如何做到这一点?
谢谢。
您是否找到解决方案?我需要完全相同! –