Visual Studio 2017バージョン15.4でMVC5プロジェクトを開発しています。ここで、今まで直面したことのない予期しない結果が得られています。 nuget
からNinject.MVC5
パッケージをインストールしました。うまくインストールされており、エラーや警告は表示されません。しかし問題は、NinjectWebCommon.cs
フォルダーにApp_Start
ファイルが生成されないことです。理由はありますか?
多くの検索とテストの後、システムが以前の回答で一度に複数のインスタンスを作成しようとしていたときにエラーに直面した正確な解決策を手に入れました。ここでは、NinjectWebCommon
クラスのみを作成する必要がありました継承なしNinjectHttpApplication
。
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()
});
}
}
しかし、ここにパラメータ化されたコンストラクタの問題があります。この問題を回避するために、Concrete Instanceを作成するメソッドを追加しました。これが更新されたコードです。
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()
});
}
}
最新の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つであるように見えます
マットのコメントを参照してください- Web API2 NinjectWebCommon.csは表示されません
NugetパッケージからNinject.MVC5をインストールし、バージョン3.2.1を維持最新の3.3.0バージョンでは、NinjectWebCommon.csファイルが追加されていなかったため、バージョンをダウングレードしました。
ハッピーコーディング!
以下のパッケージをすべてインストールすると、自動的に動作します。
パッケージid = Ninjectバージョン= 3.3.4 targetFramework = net451パッケージid = Ninject.Extensions.Conventionsバージョン= 3.3.0 targetFramework = net451パッケージid = Ninject.Extensions.Factoryバージョン= 3.3.2 targetFramework = net451パッケージid = Ninject.MVC5 version = 3.3.0 targetFramework = net451 package id = Ninject.Web.Commonenter code here version = 3.3.1 targetFramework = net451 package id = Ninject.Web.Common.W
私は同じ問題に直面していましたが、これを修正するために、Ninjectパッケージのバージョンを3.2.2に変更しました。(ダウングレード)これを行うと、NinjectWebCommon.csが生成されます。 Ninjectパッケージの。プロジェクトを実行します。プロジェクトは適切に実行されます。