我有一个MVC 5项目并使用Unity Framework进行依赖注入。一切都很好,但突然间我得到了错误
“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;
}
}
请帮我解决此问题。提前谢谢。
答案 0 :(得分:0)
问题得到解决。我安装了re-sharper工具。在其中一个商务类中,我将其作为抽象。所以它抛出了错误。