web-dev-qa-db-ja.com

Web API2 NinjectWebCommon.csが表示されません

私はEmpty Web API in Visual Studio 2013フレームワーク4.5。明らかにNinjectWebCommon.csは表示されません。

Nuget経由でインストールしましたが、

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

  • Ninject.web.WebApi.WebHost

    だが NinjectWebCommon.csはまだ表示されません。

他に何をインストールする必要がありますか?

そのファイルを手動で追加できますか?

ありがとう

14
Diego

最新のNinject.Web.Common.WebHost 3.3.0 NuGetパッケージにはNinjectWebCommon.csが含まれていないようです。 3.2.0などの古いバージョンには、このファイルが含まれています。

Ninject.Web.Common.WebHost 3.3.0は、NinjectWebCommon.csから派生して使用できるNinjectHttpApplicationクラスを提供します。 Ninjectのwikiドキュメント は更新されていないようですが、以下に示すように、NinjectHttpApplicationの使用はドキュメント化されたアプローチの1つです。

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);
   }
}
30
Matt Ward

最新のNinjectでテスト済み:空のWebアプリケーションを作成し、MvcおよびWeb Apiのチェックボックスを選択します

Nugetパッケージのインストール:Ninject.Web.WebApi.WebHost

Nugetパッケージのインストール:WebActivatorEx

NinjectWebCommon.csという名前のApp_Startでクラスを作成します

 [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!"));
         }
     }
 }

RegisterServicesでDIを構成する

MvcまたはWeb Api Controllersコンストラクターパラメーターに依存関係を追加する

お役に立てば幸いです。

8
AngelBlueSky

App_Startフォルダーで自動生成されたNinjectWebCommonクラスを取得する場合は、Highest inのDependency behaviorオプションの値を変更する必要がありますNuGet Package Manager。 NinjectWebCommonを含むすべての依存関係をダウンロードします。 enter image description here

5
Yaroslav