我如何Ninject在ASP.NET MVC Web应用程序工作? [英] How do I work with Ninject in an ASP.NET MVC Web App?

查看:106
本文介绍了我如何Ninject在ASP.NET MVC Web应用程序工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个新的MVC的Web应用程序,我不得不Ninject.dll,Ninject.Web.Common.dll和Ninject.Web.MVC.dll引用。

的Global.asax.cs:

 公共类MvcApplication:NinjectHttpApplication
    {
        公共静态无效RegisterGlobalFilters(GlobalFilterCollection过滤器)
        {
            filters.Add(新HandleErrorAttribute());
        }        公共静态无效的RegisterRoutes(RouteCollection路线)
        {
            routes.IgnoreRoute({}资源个.axd / {*} PATHINFO);            routes.MapRoute(
                默认,//路线名称
                {控制器} / {行动} / {ID},// URL带参数
                新
                {
                    控制器=家,
                    行动=索引,
                    ID = UrlParameter.Optional
                });
        }        保护覆盖的iKernel CreateKernel()
        {
            VAR内核=新StandardKernel();
            kernel.Load(Assembly.GetExecutingAssembly());
            返回内核;
        }        保护覆盖无效OnApplicationStarted()
        {
            base.OnApplicationStarted();            AreaRegistration.RegisterAllAreas();
            RegisterGlobalFilters(GlobalFilters.Filters);
            的RegisterRoutes(RouteTable.Routes);
        }
    }

App_start \\ NinjectWebCommon:

 公共静态类NinjectWebCommon
    {
        私人静态只读引导程序引导程序=新的引导程序();        ///<总结>
        ///启动应用
        ///< /总结>
        公共静态无效的start()
        {
            DynamicModuleUtility.RegisterModule(typeof运算(OnePerRequestHttpModule));
            DynamicModuleUtility.RegisterModule(typeof运算(NinjectHttpModule));
            bootstrapper.Initialize(CreateKernel);
        }        ///<总结>
        ///停止应用程序。
        ///< /总结>
        公共静态无效停止()
        {
            bootstrapper.ShutDown();
        }        ///<总结>
        ///创建将管理应用程序的内核。
        ///< /总结>
        ///<收益方式>创建的内核和LT; /回报>
        私有静态的iKernel CreateKernel()
        {
            VAR内核=新StandardKernel();
            kernel.Bind<&Func键LT;的iKernel>方式>()ToMethod(CTX =>()=>新建引导程序()内核。);
            kernel.Bind&所述; IHttpModule的方式>()到< HttpApplicationInitializationHttpModule>();            RegisterServices(内核);
            返回内核;
        }        ///<总结>
        ///装入模块或在这里注册您服务!
        ///< /总结>
        ///< PARAM NAME =内核方式>内核< /参数>
        私有静态无效RegisterServices(内核的iKernel)
        {
        }
    }

我得到错误的顺序不包含元素。我在做什么错了?

错误详细信息:

 说明:当前Web请求的执行过程中发生未处理的异常。检查这个错误的详细信息的堆栈跟踪以及它起源于code。异常详细信息:System.InvalidOperationException:序列不包含任何元素源错误:
  当前Web请求的执行过程中发生未处理的异常。有关异常的来源和位置信息可以使用异常堆栈跟踪下面确定。
堆栈跟踪:[出现InvalidOperationException:Последовательностьнесодержитэлементов]
   System.Linq.Enumerable.Single(IEnumerable`1源)+ 320
   Ninject.Web.Mvc.NinjectMvcHttpApplicationPlugin.Start()在C:\\项目\\ Ninject \\ ninject.web.mvc \\ MVC3的\\ src \\ Ninject.Web.Mvc \\ NinjectMvcHttpApplicationPlugin.cs:53
   Ninject.Web.Common.Bootstrapper<初始化>在C b__0(INinjectHttpApplicationPlugin C):\\项目\\ Ninject \\ Ninject.Web.Common的\\ src \\ Ninject.Web.Common \\ Bootstrapper.cs:52
   Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map(IEnumerable`1系列,Action`1动作)在C:\\项目\\ Ninject \\ ninject的\\ src \\ Ninject \\基础设施\\语言\\ ExtensionsForIEnumerableOfT.cs:32
   Ninject.Web.Common.Bootstrapper.Initialize(Func`1 createKernelCallback)在C:\\项目\\ Ninject \\ Ninject.Web.Common的\\ src \\ Ninject.Web.Common \\ Bootstrapper.cs:52
   Ninject.Web.Common.NinjectHttpApplication.Application_Start()在C:\\项目\\ Ninject \\ Ninject.Web.Common的\\ src \\ Ninject.Web.Common \\ NinjectHttpApplication.cs:80


解决方案

您从 NinjectHttpApplication 导出,并且您使用 App_Start 在同一时间。选一个!阅读Ninject.MVC3 的实况获取更多信息。

I've created a new MVC Web application and I have references to Ninject.dll, Ninject.Web.Common.dll and Ninject.Web.MVC.dll.

Global.asax.cs:

public class MvcApplication : NinjectHttpApplication
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }

        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
                });
        }

        protected override IKernel CreateKernel()
        {
            var kernel = new StandardKernel();
            kernel.Load(Assembly.GetExecutingAssembly());
            return kernel;
        }

        protected override void OnApplicationStarted()
        {
            base.OnApplicationStarted();

            AreaRegistration.RegisterAllAreas();
            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }
    }

App_start\NinjectWebCommon:

public static class NinjectWebCommon 
    {
        private static readonly Bootstrapper bootstrapper = new Bootstrapper();

        /// <summary>
        /// Starts the application
        /// </summary>
        public static void Start() 
        {
            DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
            DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
            bootstrapper.Initialize(CreateKernel);
        }

        /// <summary>
        /// Stops the application.
        /// </summary>
        public static void Stop()
        {
            bootstrapper.ShutDown();
        }

        /// <summary>
        /// Creates the kernel that will manage your application.
        /// </summary>
        /// <returns>The created kernel.</returns>
        private static IKernel CreateKernel()
        {
            var kernel = new StandardKernel();
            kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
            kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

            RegisterServices(kernel);
            return kernel;
        }

        /// <summary>
        /// Load your modules or register your services here!
        /// </summary>
        /// <param name="kernel">The kernel.</param>
        private static void RegisterServices(IKernel kernel)
        {
        }        
    }

I get the error "The sequence contains no elements". What am I doing wrong?

Error details:

Description: An unhandled exception occurred during the execution of the current web request. Examine the stack trace for more information about this error and where it originated in the code.

Exception Details: System.InvalidOperationException: Sequence contains no elements

Source Error:
  Unhandled exception occurred during execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.


Stack Trace:

[InvalidOperationException: Последовательность не содержит элементов]
   System.Linq.Enumerable.Single(IEnumerable`1 source) +320
   Ninject.Web.Mvc.NinjectMvcHttpApplicationPlugin.Start() in c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectMvcHttpApplicationPlugin.cs:53
   Ninject.Web.Common.Bootstrapper.<Initialize>b__0(INinjectHttpApplicationPlugin c) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\Bootstrapper.cs:52
   Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map(IEnumerable`1 series, Action`1 action) in c:\Projects\Ninject\ninject\src\Ninject\Infrastructure\Language\ExtensionsForIEnumerableOfT.cs:32
   Ninject.Web.Common.Bootstrapper.Initialize(Func`1 createKernelCallback) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\Bootstrapper.cs:52
   Ninject.Web.Common.NinjectHttpApplication.Application_Start() in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\NinjectHttpApplication.cs:80

解决方案

You are deriving from NinjectHttpApplication AND you are using App_Start at the same time. Choose one! Read the docu of Ninject.MVC3 for more info.

这篇关于我如何Ninject在ASP.NET MVC Web应用程序工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆