我已经实现了一个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
答案 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创建 查看页面类型。