我已经将StructureMap设置为DI的选择,并且在注册我的自定义控制器工厂时,会弹出此错误(如果未设置StructureMap,则不会弹出错误)。我不知道为什么会出现这种错误,看起来很奇怪,我错过了什么?我已经看到围绕这个问题的评论,但没有明确的答案。如果我错过了正确的解决办法,你能指出我正确的方向吗?
public class StructureMapControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
var appRepo = new ApplicationDbContext();
var settingsRepo = new SettingRepository(appRepo);
if (controllerType == typeof(SettingsController))
{
return new SettingsController(settingsRepo);
}
return base.GetControllerInstance(requestContext, controllerType);
}
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// This initializes our database
Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());
答案 0 :(得分:1)
在调试模式下运行时,我刚刚遇到这个可能有误导性的消息。 我发生的事情是我从BundleConfig.cs中删除了modernizr
//bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
// "~/Scripts/modernizr-*"));
但是当我在我的项目中创建了新区域时,它在加载modernizr的调用中已经搭建了脚手架
@Scripts.Render("~/bundles/modernizr")
您需要将此调用移至不存在的捆绑包。我建议你遇到同样的问题。
我相信这些信息将来会对某人有所帮助。