当使用Unity进行依赖项注入时,我对MVC的IDependencyResolver.GetServices的实现存在疑问。
可以找到几个示例实现,其中大多数实现都是为了解决尝试解析未注册类型时Unity抛出异常的问题。
通常,GetServices是这样实现的:
IEnumerable<object> IDependencyResolver.GetServices(Type serviceType)
{
try
{
return _container.ResolveAll(serviceType);
}
catch
{
return new List<object>();
}
}
我担心的是,ResolveAll不返回默认(未命名)注册,因此我一直无法找到任何确认信息。参见here。
IDependencyResolver的文档没有做出相同的陈述。
有谁知道IDependencyResolver.GetServices应该返回所有已注册实例还是仅返回命名实例(使用Unity术语)?
最佳答案
尝试下面的代码。我希望这会起作用。
return (serviceType.IsClass && !serviceType.IsAbstract) || _container.IsRegistered(serviceType) ? _container.ResolveAll(serviceType) : new object[] {};