it-swarm.com.de

Ninject.MVC5 generiert keine NinjectWebCommon.Cs

Ich entwickle ein MVC5-Projekt in Visual Studio 2017 Version 15.4. Ich bekomme hier ein unerwartetes Ergebnis, vor dem ich noch nie war. Ich habe das Ninject.MVC5-Paket von nuget installiert. Es wird gut installiert und gibt keine Fehler oder Warnungen aus. Das Problem ist jedoch, dass keine NinjectWebCommon.cs-Datei im App_Start-Ordner erstellt wird. Gibt es einen Grund?

16
Jaber Kibria

Nach vielen Recherchen und Tests habe ich die genaue Lösung gefunden, bei der ein Fehler aufgetreten ist, während das System mit der vorherigen Antwort mehrere Instanzen gleichzeitig erstellen wollte. Hier musste ich nur NinjectWebCommon class erstellen, ohneNinjectHttpApplication zu erben. 

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>
    /// <summary>
    /// Creates the kernel that will manage your application.
    /// </summary>
    /// <returns>The created kernel.</returns>
    private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        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)
    {
        kernel.Load(new INinjectModule[]
        {
            new Module()
        });
    }
}

Dies ist jedoch ein Problem mit dem parametrisierten Konstruktor. Um dieses Problem zu vermeiden, habe ich eine Methode zum Erstellen von Concrete Instance hinzugefügt. Also hier ist der aktualisierte Code ..

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>
    /// <summary>
    /// Creates the kernel that will manage your application.
    /// </summary>
    /// <returns>The created kernel.</returns>
    private static IKernel CreateKernel()
    {
        return Container;
    }

    public static T GetConcreteInstance<T>()
    {
        object instance = Container.TryGet<T>();
        if (instance != null)
            return (T)instance;
        throw new InvalidOperationException(string.Format("Unable to create an instance of {0}", typeof(T).FullName));
    }

    public static IKernel _container;
    private static IKernel Container
    {
        get
        {
            if (_container == null)
            {
                _container = new StandardKernel();
                _container.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
                _container.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

                RegisterServices(_container);
            }
            return _container;
        }
    }

    /// <summary>
    /// Load your modules or register your services here!
    /// </summary>
    /// <param name="kernel">The kernel.</param>
    private static void RegisterServices(IKernel kernel)
    {
        kernel.Load(new INinjectModule[]
        {
            new Module()
        });
    }
}
5
Jaber Kibria

Es sieht aus wie das neueste Ninject.Web.Common.WebHost 3.3.0 NuGet-Paket enthält nicht mehr die NinjectWebCommon.cs. Ältere Versionen wie 3.2.0 enthalten diese Datei.

Ninject.Web.Common.WebHost 3.3.0 enthält eine NinjectHttpApplication-Klasse, die Sie ableiten und anstelle der NinjectWebCommon.cs verwenden können. Die Wiki-Dokumentation für Ninject scheint nicht aktualisiert worden zu sein, aber es scheint, als wäre die Verwendung von NinjectHttpApplication ein dokumentierter Ansatz 

siehe Kommentar der Matte - Web API2 NinjectWebCommon.cs werden nicht angezeigt

15
Joe

Installieren Sie alle folgenden Pakete, es wird automatisch funktionieren.

package id = Ninject version = 3.3.4 targetFramework = net451 package id = Ninject.Extensions.Conventions version = 3.3.0 targetFramework = net451 Paket-ID = Ninject.Extensions.Factory version = 3.3.2 targetFramework = net451 Paket-ID = Ninject.MVC5 version = 3.3.0 targetFramework = net451 Paket-ID = Ninject.Web.Commonenter-Code hier Version = 3.3.1 targetFramework = Net451 Paket-ID = Ninject.Web.Common.W

2
Ravi Indra

Installieren Sie Ninject.MVC5 aus dem Nuget-Paket, und behalten Sie Version 3.2.1 In der neuesten 3.3.0-Version wurde keine NinjectWebCommon.cs-Datei hinzugefügt. Daher habe ich die Version heruntergestuft und sie hat für mich funktioniert.

Viel Spaß beim Codieren!

0
Vinayak Savale

Ich hatte das gleiche Problem, um dieses Problem zu beheben, habe ich die Version der Ninject-Pakete auf 3.2.2 geändert. (Downgrade) Dadurch wird NinjectWebCommon.cs generiert. Beim Ausführen des Projekts tritt jedoch ein Fehler auf. Wechseln Sie daher erneut zu einer früheren Version von Ninject-Paketen. Führen Sie das Projekt aus. Das Projekt wird ordnungsgemäß ausgeführt

0
Shweta Verma