当使用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[] {};

10-07 21:01