这是MVC IDependencyResolver的预期行为吗?

时间:2011-01-18 10:01:18

标签: asp.net-mvc-3

我已经实现了一个System.Web.Mvc.IDependencyResolver,它查找使用Castle Windsor注册的服务。我的GetService(Type serviceType)实现如下(对于MVC3 RC2)。

public object GetService(Type serviceType)
{
    object service = null;
    try
    {
        service = _container.Resolve(serviceType);
    }
    catch(Exception ex)
    {
        Logger.Warn("Could not resolve service-type {0} via {1}", 
            serviceType.Name, _resolverName);
    }

    return service;
}

这很好用,但我对我在日志中看到的警告有疑问(我将所有异常记录为'警告' - 请参阅上面的代码):

WARN  Default [] - Could not resolve service-type Index_cshtml via
    WindsorDependencyResolver
WARN  Default [] - Could not resolve service-type RegistrationForm_cshtml via
    WindsorDependencyResolver
WARN  Default [] - Could not resolve service-type LoginForm_cshtml via
    WindsorDependencyResolver

这些是观点。这是预期的行为吗?如果是这样,为什么要求依赖解析器查找视图?如果没有,我应该怎么做才能解决这个问题?

请注意,我没有注册IViewPageActivator的实例(请参阅下面的警告),该实例应向框架发出信号,表明应以默认方式解析视图。为什么我仍然通过依赖项解析器查看视图请求?

WARN  Default [] - Could not resolve service-type IViewPageActivator via 
    WindsorDependencyResolver

1 个答案:

答案 0 :(得分:2)

MVC3中的IDependencyResolver可以解析视图以及其他类型。如果您需要更改视图实现,例如在对解决方案进行单元测试时,这可能非常有用。 更多详情:http://bradwilson.typepad.com/blog/2010/10/service-location-pt11-view-page-activator.html

  

BuildManagerCompiledView中的逻辑   咨询依赖性解析器,   调用   GetSerivce(typeof运算(IViewPageActivator))   并在使用时提供的服务   当下。如果没有   IViewPageActivator出现在   依赖解析器,我们会问   依赖解析器来创建   通过调用具体查看页面类型   GetService的(viewPageType)。如果   依赖解析器也失败了   我们创建具体的视图页面类型   最后回到MVC 2   使用行为   Activator.CreateInstance创建   查看页面类型。