ASP.NET MVC 3:IDepencyResolver正在尝试获取IControllerFactory的实现

Roo*_*ian 4 c# asp.net asp.net-mvc-3

尽管我注册了DefaultControllerFactory,为什么IDependecyResolver试图获取IControllerFactory的实例?

Global.asax中:

ControllerBuilder.Current.SetControllerFactory(typeof(DefaultControllerFactory));
DependencyResolver.SetResolver(new StructureMapDependencyResolver());
Run Code Online (Sandbox Code Playgroud)

解析器:

public class StructureMapDependencyResolver : IDependencyResolver
{
    public static Func<Type, object> GetServiceViaDepencencyCallback = t =>
    {
        throw new NotImplementedException(
            "StructureMapDependencyResolver is not configured!");
    };

    public static Func<Type, IEnumerable<object>> GetServicesViaDepencencyCallback = t =>
    {
        throw new NotImplementedException(
            "StructureMapDependencyResolver is not configured!");
    };

    public object GetService(Type serviceType)
    {
        return GetServiceViaDepencencyCallback(serviceType);
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return GetServicesViaDepencencyCallback(serviceType);
    }
}
Run Code Online (Sandbox Code Playgroud)

抛出的错误:

StructureMap异常代码:202没有为PluginFamily System.Web.Mvc.IControllerFactory,System.Web.Mvc,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35定义的默认实例

Mat*_*ott 8

在MVC3中,DependencyResolver(它是一个服务定位器)用于尝试定位适用的类型.如果它找不到类型,那么它将继续使用遗留代码(即ControllerBuilder.Current实例)进行查找.这里重要的是它通过DependencyResolver检查您的StructureMap容器​​.MVC3要求DependencyResolver null在找不到类型时返回,框架不负责从容器中捕获任何异常.