2017-10-29 67 views
7

Empty Web API in Visual Studio 2013 Framework 4.5 yapıyorum. Açıkça NinjectWebCommon.cs görünmüyor. Ben Nuget üzerinden yüklenen Web API2 NinjectWebCommon.cs görünmüyor

,

  • Ninject,
  • Ninject.Web.Common,
  • Ninject.MVC5,
  • Ninject.Web.Common.WebHost,
  • Ninject. Web.WebApi,

  • Ninject.web.WebApi.WebHost

    ancak NinjectWebCommon.cs hala görünmüyor.

Başka neye kurmam gerekiyor?

Bu dosyayı el ile ekleyebilir miyim?

sayesinde

cevap

15

Artık En son Ninject.Web.Common.WebHost 3.3.0 Nuget paketine benziyor NinjectWebCommon.cs içerir. Bu dosyayı 3.2.0 gibi eski sürümler içerir.

Ninject.Web.Common.WebHost 3.3.0, NinjectWebCommon.cs yerine türetip kullanabileceğiniz bir NinjectHttpApplication sınıfı sağlar. wiki documentation for Ninject güncellendi görünmüyor ama aşağıda gösterildiği gibi, NinjectHttpApplication bir yaklaşım belgelenmiştir kullanarak benzer:

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(); 
     RegisterServices(kernel); 
     return kernel; 
    } 

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

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

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

Bir bağımlılığın nasıl çözüleceğini * öğrenemedim. – Alisson

1

son Ninject ile test edilmiştir: Boş Web uygulaması oluşturma ve MVC onay kutularını seçin ve Web Api

Nuget Paketi yükleyin: Ninject.Web.WebApi.WebHost

Nuget Paketi yükleyin: WebActivatorEx

adlı App_Start bir sınıf oluşturma NinjectWebCommon.cs

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(NinjectWebCommon), "Start")] 
[assembly: WebActivatorEx.ApplicationShutdownMethodAttribute(typeof(NinjectWebCommon), "Stop")] 

namespace <YOURNAMESPACE> 
{ 
    public static class NinjectWebCommon 
    { 
     private static readonly Bootstrapper bootstrapper = new Bootstrapper(); 

     public static void Start() 
     { 
      DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule)); 
      DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule)); 
      bootstrapper.Initialize(CreateKernel); 
     } 

     public static void Stop() 
     { 
      bootstrapper.ShutDown(); 
     } 

     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; 
     } 
     private static void RegisterServices(IKernel kernel) 
     { 
      //kernel.Bind<IRepo>().ToMethod(ctx => new Repo("Ninject Rocks!")); 
     } 
    } 
} 

MVC veya Web Api Kontrolörler yapıcı parametreleri

, bu yardım sayesinde Hope Bağımlılık ekle RegisterServices içinde DI yapılandırın.

+3

Bu bağlantı soruyu yanıtlayabilirken, [cevabın önemli kısımlarını] (https://meta.stackexchange.com/a/8259) buraya eklemek ve referans için bağlantı sağlamak daha iyidir. Bağlantılı sayfa değiştiğinde yalnızca bağlantı yanıtları geçersiz olabilir. [Bir bağlantıdan biraz daha fazla olan cevaplar silinebilir] (https://stackoverflow.com/help/deleted-answers) (Ayrıca, eğer bu github'unuz varsa [bağlantınızı açıklayın] [https: // stackoverflow] .com/help/promotion) cevabınız) – adiga

+0

Bu bağlantı soruyu yanıtlayabilirken, cevabın temel kısımlarını buraya eklemek ve referans için bağlantı sağlamak daha iyidir. Bağlantılı sayfa değiştiğinde yalnızca bağlantı yanıtları geçersiz olabilir.- [Yorum Yaz] (/ review/düşük kaliteli yazılar/18113030) – waka

İlgili konular