Asp.net mvc 3 需要Mono、ASP.NET MVC 3、Ninject和默认构造函数

Asp.net mvc 3 需要Mono、ASP.NET MVC 3、Ninject和默认构造函数,asp.net-mvc-3,mono,ninject,monodevelop,ninject.web.mvc,Asp.net Mvc 3,Mono,Ninject,Monodevelop,Ninject.web.mvc,我有一个正在工作的Visual Studio项目,我想用Mono和MonoDevelop运行o Mac。 该项目是一个带有Ninject MVC的ASP.NET MVC 3应用程序,它基本上在控制器上注入了一些接口实现 将所有ASP.NET MVC DLL和Ninject依赖项添加到项目后,它将成功编译。但当我运行它时,我有一个错误: 找不到WebActivatorTest.Controllers.HomeController类型的默认构造函数 我的控制器具有以下代码: public class

我有一个正在工作的Visual Studio项目,我想用Mono和MonoDevelop运行o Mac。 该项目是一个带有Ninject MVC的ASP.NET MVC 3应用程序,它基本上在控制器上注入了一些接口实现

将所有ASP.NET MVC DLL和Ninject依赖项添加到项目后,它将成功编译。但当我运行它时,我有一个错误:

找不到WebActivatorTest.Controllers.HomeController类型的默认构造函数

我的控制器具有以下代码:

public class HomeController : Controller
{
    INotifier _notifier;
    public HomeController(INotifier notifier_)
    {
        _notifier = notifier_;
    }

    public ActionResult Index()
    {
        ViewBag.Name = _notifier.Person();

        return View();
    }

}

我不想有一个空构造函数,因为我现在有一个注册接口的AppStart代码:

private static void RegisterServices(IKernel kernel)
{
     kernel.Bind<WebActivatorTest.Models.INotifier>().To<WebActivatorTest.Models.Notifier>();
}
私有静态无效注册服务(IKernel内核)
{
kernel.Bind().To();
}
此代码在Windows/VisualStudio上运行良好,但在Mono上不起作用。 有人能帮我吗

完全错误是:

Server Error in '/' Application

Default constructor not found for type WebActivatorTest.Controllers.HomeController.

Description: HTTP 500. Error processing request.

Stack Trace:

System.MissingMethodException: Default constructor not found for type     WebActivatorTest.Controllers.HomeController.
at System.Activator.CreateInstance (System.Type type, Boolean nonPublic) [0x00000] in <filename unknown>:0 
at System.Activator.CreateInstance (System.Type type) [0x00000] in <filename unknown>:0 
at System.Web.Mvc.DefaultControllerFactory+DefaultControllerActivator.Create (System.Web.Routing.RequestContext requestContext, System.Type controllerType) [0x00000] in <filename unknown>:0 
Version information: Mono Runtime Version: 2.10.9 (tarball Tue Mar 20 15:31:37 EDT 2012); ASP.NET Version: 4.0.30319.1
“/”应用程序中的服务器错误 找不到WebActivatorTest.Controllers.HomeController类型的默认构造函数。 描述:HTTP 500。处理请求时出错。 堆栈跟踪: System.MissingMethodException:找不到WebActivatorTest.Controllers.HomeController类型的默认构造函数。 在:0中的System.Activator.CreateInstance(System.Type类型,布尔非公共)[0x00000]处 在0中的System.Activator.CreateInstance(System.Type类型)[0x00000]处 0中的System.Web.Mvc.DefaultControllerFactory+DefaultControllerActivator.Create(System.Web.Routing.RequestContext RequestContext,System.Type controllerType)[0x00000]处 版本信息:Mono运行时版本:2.10.9(tarball Tue Mar 20 15:31:37 EDT 2012);ASP.NET版本:4.0.30319.1
您可以添加默认构造函数

public HomeController()
{
}
但我认为,你错误地激活了控制器的Ninject。你需要注册一家工厂。确保Global.asax中的代码如下所示:

 public class MvcApplication : NinjectHttpApplication
    {
        /// <summary>
        /// Registers the global filters.
        /// </summary>
        /// <param name="filters">The filters.</param>
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }

        /// <summary>
        /// Registers the routes.
        /// </summary>
        /// <param name="routes">The routes.</param>
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional });
        }

        /// <summary>
        /// Creates the kernel that will manage your application.
        /// </summary>
        /// <returns>The created kernel.</returns>
        protected override IKernel CreateKernel()
        {
            var kernel = new StandardKernel();
            kernel.Load(Assembly.GetExecutingAssembly());
            return kernel;
        }

        /// <summary>
        /// Called when the application is started.
        /// </summary>
        protected override void OnApplicationStarted()
        {
            base.OnApplicationStarted();

            AreaRegistration.RegisterAllAreas();
            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }
    }
public类mvcapapplication:NinjectHttpApplication
{
/// 
///注册全局筛选器。
/// 
///过滤器。
公共静态无效注册表全局过滤器(全局过滤器集合过滤器)
{
filters.Add(新HandleErrorAttribute());
}
/// 
///登记路线。
/// 
///路线。
公共静态无效注册表项(路由收集路由)
{
routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);
routes.MapRoute(
“默认值”,//路由名称
“{controller}/{action}/{id}”,//带参数的URL
新的{controller=“Home”,action=“Index”,id=urlparmeter.Optional});
}
/// 
///创建将管理应用程序的内核。
/// 
///创建的内核。
受保护的覆盖IKernel CreateKernel()
{
var kernel=新的标准内核();
Load(Assembly.getExecutionGassembly());
返回内核;
}
/// 
///在应用程序启动时调用。
/// 
Application Started()上受保护的覆盖无效
{
base.on应用程序启动();
RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
注册地址(RouteTable.Routes);
}
}
此外,例如,您可以在MVC3上看到示例代码,也可以使用for ninject,如详细所述


我想这对Mono会起作用。我来晚了一点,但这个解决方案帮了我的忙

重写默认构造函数:

public HomeController() : this(new Notifier())
{

}

public HomeController(INotifier notifier_)
{
    _notifier = notifier_;
}

您使用的是哪种Mono版本?Ninject没有在例外情况中提及这一事实的可能重复[您没有发布]强烈表明MVC没有正确地了解您以及Ninject希望负责控制器创建的愿望。你找不到dup并且花了我很多时间才找到的原因是,你没有显示确切的异常消息-如果你以后记得添加关键细节,这会节省很多时间…没有重复的无参数构造函数…对不起,没有更清楚-AIUI有一个重复的问题(上面链接)-“我在MVC中使用Ninject,MVC告诉我需要一个无参数构造函数”我不想要一个空构造函数。我的Global.asax没有注册Ninject工厂。。。因为项目有一个AppStart/NinjectMV3.cs来完成这项工作。Ninject是与NuGet os Visual Studio一起安装的,后者是这样安装的。