【问题标题】:The IControllerFactory 'UnityControllerFactory' did not return a controller for the name 'controller'IControllerFactory 'UnityControllerFactory' 没有返回名称为 'controller' 的控制器
【发布时间】:2015-02-13 09:50:01
【问题描述】:

我有一个 MVC 5 项目并使用 Unity 框架进行依赖注入。一切正常,但突然出现以下错误

“IControllerFactory 'App.Web.Models.UnityControllerFactory' 没有返回名称为 'School' 的控制器。”

GLobal.asax.cs 代码

private static UnityContainer _container;

    public static IUnityContainer Container
    {
        get { return _container; }
    }

    IUnityContainer IUnityContainerAccessor.Container
    {
        get { return Container; }
    }

    #endregion

    protected void Application_Start()
    {
        if (_container == null)
        {
            _container = new UnityContainer();
            ContainerConfig.RegisterTypes(_container);
        }          

         WebApiConfig.Register(GlobalConfiguration.Configuration);
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();

    }

ContainerConfig.cs

public static class ContainerConfig
{
    public static void RegisterTypes(UnityContainer container)
    {
        container.RegisterInstance<IUnityContainer>(container);

        container.RegisterType<Entities>(new HttpContextLifetimeManager<Entities>(), new InjectionConstructor());

        container.RegisterType<IDatabaseContext, Entities>();                    



        container.RegisterType<ICommonService, CommonService>();

        container.RegisterType<ISearchService, SearchService>();

        container.RegisterType<ILogger, Log4NetLogger>();



        ControllerBuilder.Current.SetControllerFactory(typeof(UnityControllerFactory));
    }
}

UnityControllerFactory.cs

public class UnityControllerFactory : DefaultControllerFactory
{
    public override IController CreateController(RequestContext context, string controllerName)
    {
        try
        {
            var type = GetControllerType(context, controllerName);

            if (type == null)
            {
                throw new InvalidOperationException(string.Format("Could not find a controller with the name {0}.", controllerName));
            }

            var container = GetContainer(context);

            return (IController)container.Resolve(type);
        }
        catch
        {
            return null;
        }
    }

    protected virtual IUnityContainer GetContainer(RequestContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException("context");
        }

        var unityContainerAccessor = context.HttpContext.ApplicationInstance as IUnityContainerAccessor;

        if (unityContainerAccessor == null)
        {
            throw new InvalidOperationException("You must extend the HttpApplication in your web project and implement the IContainerAccessor to properly expose your container instance");
        }

        IUnityContainer container = unityContainerAccessor.Container;

        if (container == null)
        {
            throw new InvalidOperationException("The container seems to be unavailable in your HttpApplication subclass");
        }

        return container;
    }
}

请帮我解决这个问题。提前致谢。

【问题讨论】:

    标签: asp.net-mvc-4 dependency-injection c#-5.0


    【解决方案1】:

    问题解决了。我已经安装了重新锐化工具。在其中一个商务舱中,我将其设为抽象。所以它抛出了上述错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2017-06-15
      • 1970-01-01
      相关资源
      最近更新 更多