Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用最新的MVC 5/Web Api 2获得最新的Ninject?_C#_Ninject_Asp.net Web Api2_Asp.net Mvc 5.1 - Fatal编程技术网

C# 使用最新的MVC 5/Web Api 2获得最新的Ninject?

C# 使用最新的MVC 5/Web Api 2获得最新的Ninject?,c#,ninject,asp.net-web-api2,asp.net-mvc-5.1,C#,Ninject,Asp.net Web Api2,Asp.net Mvc 5.1,我知道有几个问题有点像这一个,但由于我找不到任何文档,其他问题都没有对我有帮助的答案,下面是: 我创建了一个新的ASP.NET应用程序(VS2013),选择了MVC,我添加了API。我在包控制台中运行“更新包”以更新到最新版本(MVC 5.1.2、Web Api 5.1.2) 然后我添加新的和包 我将这些行添加到web.config文件(Ninject想要5.0版,我有5.1版): 在App_start/NinjectWebCommon.cs文件中,我添加了一个绑定: private

我知道有几个问题有点像这一个,但由于我找不到任何文档,其他问题都没有对我有帮助的答案,下面是:

我创建了一个新的ASP.NET应用程序(VS2013),选择了MVC,我添加了API。我在包控制台中运行“更新包”以更新到最新版本(MVC 5.1.2、Web Api 5.1.2)

然后我添加新的和包

我将这些行添加到web.config文件(Ninject想要5.0版,我有5.1版):


在App_start/NinjectWebCommon.cs文件中,我添加了一个绑定:

    private static void RegisterServices(IKernel kernel) {
        kernel.Bind<ILogger, NLogLogger>();
    }
私有静态无效注册服务(IKernel内核){
Bind();
}
然后我添加了一个ApiController,其中ILogger作为构造函数中的单个参数,并将ILogger作为参数添加到HomeController的构造函数中

这应该是测试用的吗

我是否缺少WebApi的一些连接?或者这是“幕后”发生的

无论如何,访问api控制器会导致以下错误:

尝试创建“TestController”类型的控制器时出错。确保控制器具有无参数公共构造函数

尝试HomeController给了我以下信息:

对象引用未设置为对象的实例

我也试过同样的方法,没有更新到最新的软件包,同样的问题。我已经在MVC3中使用Ninject很多年了(我也尝试过Ninject.MVC3包),我完全不知道为什么它不起作用。有了WebApi,我有点期待调用SetResolver,但是

任何帮助都将被感激

正如Ninject.Web.WebApi所提到的,它不是一个独立的Nuget包。 为您的应用程序选择合适的Ninject.Web.WebApi.*包。在您的情况下,Ninject.Web.WebApi.WebHost很可能会这样做

  • 创建空的Web应用程序
  • 安装Ninject.MVC5
  • 安装Ninject.Web.WebApi.WebHost
  • 更新所有Nuget包
  • 创建一个Mvc控制器和ApiController,它们具有ILogger依赖关系
  • 为MVC和WebAPI注册一次ILogger

  • 这不是MVC/WebApi问题

    您的配置错误:

    kernel.Bind<ILogger, NLogLogger>();
    
    kernel.Bind();
    
    应该是

    kernel.Bind<ILogger>().To<NLogLogger>();
    
    kernel.Bind().To();
    
    要在带有
    MVC
    WebApi
    的项目中使用Ninject,您必须安装以下软件包:

    -Ninject
    -Ninject.MVC5
    -Ninject.Web
    -Ninject.Web.Common
    -Ninject.Web.Common.WebHost
    -Ninject.Web.WebApi
    -Ninject.Web.WebApi.WebHost
    
    这些软件包将以下文件添加到
    App\u Start
    文件夹:
    NinjectWeb.cs:

    [assembly: WebActivatorEx.PreApplicationStartMethod(typeof(Smartiz.UI.NinjectWeb), "Start")]
    
    namespace Smartiz.UI
    {
        using Microsoft.Web.Infrastructure.DynamicModuleHelper;
    
        using Ninject.Web;
    
        public static class NinjectWeb 
        {
            /// <summary>
            /// Starts the application
            /// </summary>
            public static void Start() 
            {
                DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
            }
        }
    }
    
    using System;
    using System.Web;
    using Microsoft.Web.Infrastructure.DynamicModuleHelper;
    using Ninject;
    using Ninject.Extensions.Conventions;
    using Ninject.Web.Common;
    using Smartiz.ClientServices;
    using Smartiz.UI;
    using WebActivatorEx;
    
    [assembly: WebActivatorEx.PreApplicationStartMethod(typeof(NinjectWebCommon), "Start")]
    [assembly: ApplicationShutdownMethod(typeof(NinjectWebCommon), "Stop")]
    
    namespace Smartiz.UI
    {
        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();
                try
                {
                    kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
                    kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
    
                    RegisterServices(kernel);
                    return kernel;
                }
                catch
                {
                    kernel.Dispose();
                    throw;
                }
            }
    
            /// <summary>
            /// Load your modules or register your services here!
            /// </summary>
            /// <param name="kernel">The kernel.</param>
            private static void RegisterServices(IKernel kernel)
            {
                //kernel.Bind(q =>
                //  q.FromAssembliesMatching("Smartiz.ClientServices*")
                //  .SelectAllClasses()
                //  .InheritedFrom(typeof(BaseService))
                //  .BindDefaultInterface()
                //  .Configure(c => c.InSingletonScope()));
            }        
        }
    }
    
    [程序集:webActivatex.PreApplicationStartMethod(typeof(Smartiz.UI.NinjectWeb),“开始”)]
    名称空间Smartiz.UI
    {
    使用Microsoft.Web.Infrastructure.DynamicModuleHelper;
    使用Ninject.Web;
    Web上的公共静态类
    {
    /// 
    ///启动应用程序
    /// 
    公共静态void Start()
    {
    RegisterModule(typeof(NinjectHttpModule));
    }
    }
    }
    
    NinjectWebCommon.cs:

    [assembly: WebActivatorEx.PreApplicationStartMethod(typeof(Smartiz.UI.NinjectWeb), "Start")]
    
    namespace Smartiz.UI
    {
        using Microsoft.Web.Infrastructure.DynamicModuleHelper;
    
        using Ninject.Web;
    
        public static class NinjectWeb 
        {
            /// <summary>
            /// Starts the application
            /// </summary>
            public static void Start() 
            {
                DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
            }
        }
    }
    
    using System;
    using System.Web;
    using Microsoft.Web.Infrastructure.DynamicModuleHelper;
    using Ninject;
    using Ninject.Extensions.Conventions;
    using Ninject.Web.Common;
    using Smartiz.ClientServices;
    using Smartiz.UI;
    using WebActivatorEx;
    
    [assembly: WebActivatorEx.PreApplicationStartMethod(typeof(NinjectWebCommon), "Start")]
    [assembly: ApplicationShutdownMethod(typeof(NinjectWebCommon), "Stop")]
    
    namespace Smartiz.UI
    {
        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();
                try
                {
                    kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
                    kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
    
                    RegisterServices(kernel);
                    return kernel;
                }
                catch
                {
                    kernel.Dispose();
                    throw;
                }
            }
    
            /// <summary>
            /// Load your modules or register your services here!
            /// </summary>
            /// <param name="kernel">The kernel.</param>
            private static void RegisterServices(IKernel kernel)
            {
                //kernel.Bind(q =>
                //  q.FromAssembliesMatching("Smartiz.ClientServices*")
                //  .SelectAllClasses()
                //  .InheritedFrom(typeof(BaseService))
                //  .BindDefaultInterface()
                //  .Configure(c => c.InSingletonScope()));
            }        
        }
    }
    
    使用系统;
    使用System.Web;
    使用Microsoft.Web.Infrastructure.DynamicModuleHelper;
    使用Ninject;
    使用Ninject.Extensions.Conventions;
    使用Ninject.Web.Common;
    使用Smartiz.ClientServices;
    使用Smartiz.UI;
    使用WebActivatex;
    [程序集:WebActivatorEx.PreApplicationStartMethod(typeof(NinjectWebCommon),“开始”)]
    [程序集:ApplicationShutdownMethod(typeof(NinjectWebCommon),“Stop”)]
    名称空间Smartiz.UI
    {
    公共静态类NinjectWebCommon
    {
    私有静态只读引导程序Bootstrapper=new Bootstrapper();
    /// 
    ///启动应用程序
    /// 
    公共静态void Start()
    {
    RegisterModule(typeof(OnePerRequestHttpModule));
    RegisterModule(typeof(NinjectHttpModule));
    初始化(CreateKernel);
    }
    /// 
    ///停止应用程序。
    /// 
    公共静态无效停止()
    {
    Bootstrapper.ShutDown();
    }
    /// 
    ///创建将管理应用程序的内核。
    /// 
    ///创建的内核。
    私有静态IKernel CreateKernel()
    {
    var kernel=新的标准内核();
    尝试
    {
    kernel.Bind().ToMethod(ctx=>()=>newbootstrapper().kernel);
    kernel.Bind().To();
    注册服务(内核);
    返回内核;
    }
    抓住
    {
    Dispose();
    投掷;
    }
    }
    /// 
    ///在这里加载您的模块或注册您的服务!
    /// 
    ///内核。
    私有静态无效注册服务(IKernel内核)
    {
    //Bind(q=>
    //q.FromAssembliesMatching(“Smartiz.ClientServices*”)
    //.SelectAllClasses()
    //.继承自(typeof(BaseService))
    //.BindDefaultInterface()
    //.Configure(c=>c.InSingletonScope());
    }        
    }
    }
    
    谢谢你的链接,不知道谷歌为什么没有找到。我已经按照你写的那样做了(并且像我在问题中写的那样将这些东西添加到web.config文件中,如果没有这些东西,它将无法工作),仍然会收到相同的错误。当您为这两个对象编写一次Register ILogger时,这意味着什么?我仍然找不到任何关于连接WebApi部分的信息。(我的基本项目在这里:)谢谢雷莫,这个答案很直截了当,我在谷歌上尝试了很多答案,对我很有用。仅供参考,对于我的项目,我使用的是MVC5和Web Api。这就是使用Ninject多年后发生的情况,但两者之间有一个抽象!多谢各位!只是想澄清一下,,