空のAsp.NetMVC3プロジェクトを作成し、nuget install-package Ninject.MVC3
を使用しました
他に何もせずに(サービスが登録されておらず、コントローラーも作成されていません)、アプリケーションを実行します。
プロジェクトは、次の例外を除いて、NinjectMVC3.csの22行目で中断します。
[InvalidOperationException:Already Initialized!] c:\ Projects\Ninject\Maintenance2.2\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc \のNinject.Web.Mvc.Bootstrapper.Initialize(Func`1 createKernelCallback) Bootstrapper.cs>:58 Mvc.App_Start.NinjectMVC3.Start()in c:\ Projects\Events\Events\App_Start\NinjectMVC3.cs:22
[TargetInvocationException:呼び出しのターゲットによって例外がスローされました。]
System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfoメソッド、オブジェクトターゲット、Object []引数、SignatureStruct&sig、MethodAttributes methodAttributes、RuntimeType typeOwner)+0
System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfoメソッド、オブジェクトターゲット、Object []引数、署名sig、MethodAttributes methodAttributes、RuntimeType typeOwner)+72
System.Reflection.RuntimeMethodInfo.Invoke(Object obj、BindingFlags invokeAttr、バインダーバインダー、Object []パラメーター、CultureInfoカルチャ、ブールskipVisibilityChecks)+335
System.Reflection.RuntimeMethodInfo.Invoke(Object obj、BindingFlags invokeAttr、バインダーバインダー、Object []パラメーター、CultureInfoカルチャ)+28
System.Reflection.MethodBase.Invoke(Object obj、Object [] parameters)+19
WebActivator.BaseActivationMethodAttribute.InvokeMethod()+ 199 WebActivator.ActivationManager.RunActivationMethods()+ 330 WebActivator.ActivationManager.RunPreStartMethods()+ 27 WebActivator.ActivationManager.Run()+ 39
NinjectMVC3.csの行は次のとおりです。
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
bootstrapper.Initialize(CreateKernel); // <- this one right here...
}
これで何が起こっているのですか?私は他のプロジェクトでMVC3にNinjectをまったく問題なく使用しました。 Start()メソッドの2行目がNinject.MVC3の古い(週)パッケージに含まれていないことに気付いたので、最近の更新でも何か他のものが壊れている可能性がありますか?
助けてください!
レモからの回答に対応するために編集
これは私のglobal.asax.csからです
public class MvcApplication : System.Web.HttpApplication
{
Global.asaxも100%標準です。調整は行われません。
編集-問題はなくなりました...
正直なところ、これの原因はわかりませんが、Visual Studioを数回再起動し、完全に再起動すると、プロジェクトは正常に機能します。また、新しいプロジェクトで問題を再現することもできません。
時間を無駄にしてすみません:)
問題はなくなりました...
正直なところ、これの原因はわかりませんが、Visual Studioを数回再起動し、完全に再起動すると、プロジェクトは正常に機能します。また、新しいプロジェクトで問題を再現することもできません。
時間を無駄にしてすみません:)
[〜#〜]更新[〜#〜]
この回答を投稿してから、いくつかの良い回答が表示されています。この回答を更新して、さまざまなアプローチを1つの回答にまとめています。それがあなたたちにとって大丈夫であることを願っています:
DevilDog74 回答済み
最後に、gitubに移動して新しいリポジトリのクローンを作成し、最新のNinject.Web.Commonと最新のNinject2リリースビルドをダウンロードして、ローカルリリースビルドを実行しました。次に、nugetパッケージを破棄し、新しくコンパイルされたアセンブリ「Ninject」、「Ninject.Web.Common」、「Ninject.Web.Mvc」へのアセンブリ参照を作成しました。プロジェクトが開始され、依存関係が設定されたコントローラーが作成されていました。解決しました。
ジェフ・チルチェオ 回答済み
Nugetパッケージを使用する代わりに、 https://github.com/ninject/ninject.web.mvc からダウンロードすることで問題を解決しました。参照を追加した後は、何もする必要はありませんでした。
マーカスキング 答えた
最終的に私のために働いたのは、Ninject MVC NuGetパッケージを完全に削除し、NinjectとNinjectdllの昔ながらの方法を追加することでした。 NuGetパッケージに問題があるのではないかと思います。
見てください MVC3アプリケーションのセットアップ
要するに:
プロジェクトには、App_Start
ファイルを含むNinjectMVC3.cs
フォルダーがあります。
NuGetパッケージをGlobal.asaxの変更と組み合わせて使用する場合(理由はありません)、App_Start
フォルダーを削除し、WebActivatorおよびMicrosoft.Web.Infrastructureへの参照を削除する必要があります。
この状況は、プロジェクトの名前空間を変更してから、再び元に戻したときに発生しました。
ソリューションをクリーンアップしてiisresetを実行した場合でも、「すでに初期化されています」で戻ってきました。
この問題は、名前空間を変更してプロジェクトをビルドしたときにbinディレクトリに作成されたdllから発生しました。名前空間を元に戻し、ソリューションをクリーンアップした後、代替名前空間のdllはまだ存在していたため、 Webアプリケーションが起動し、「すでに初期化されています」エラーが発生しました。
dllを削除すると、問題が修正されました。
ほとんどの場合、NinjectHttpApplicationから派生し、同時にAppStartを使用しています。これらの2つの方法を混同しないでください。
ドキュメントを読む https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application
私は最近同じ問題に遭遇しました。私の場合、ソリューションに複数のプロジェクトがあります...そしてそれらのプロジェクトの1つにNinject.MVC3へのNuGetパッケージ参照が含まれています。
Ninjectパッケージのすべてのバージョンを更新すると、NuGet参照を持つすべてのプロジェクトにApp_Startフォルダーが作成されました。そのため、クラスライブラリプロジェクトからApp_Startフォルダーに移動して削除する必要がありました。メインMVCアプリケーションにApp_Startフォルダーを残すだけです。
アプリケーションが爆撃された原因はわかりませんが、VSの再起動で問題が解決したことをうれしく思います。同じエラーが発生しましたが、クリーンアップ/再構築を何回実行したか、またはVSを再起動した回数に関係なく、修正できませんでした。
最終的に私のために働いたのは、Ninject MVC NuGetパッケージを完全に削除し、NinjectとNinjectdllの昔ながらの方法を追加することでした。 NuGetパッケージに問題があるのではないかと思います。
これが他の誰かに役立つことを願っています。必要なのはNuGetパッケージをダンプすることだけだったので、数時間を無駄にしました。
Ninject.Web.MVC3パッケージをバージョン2.2.2.0にアップグレードしたときにも同じ問題が発生しました。この更新により、.csprojファイル(VCS FTW!)に次の行が追加されていることに気付きました。
<Compile Include="App_Start\NinjectMVC3.cs" />
そのファイルのビルドアクションをコンパイルからコンテンツに変更すると、問題が解決しました。結局のところ、App_StartはApp_Codeと同じくらい邪悪です...
ドキュメントを読んでください!
https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application
これらのアプローチの違いは何ですか?
どちらのアプローチもまったく同じです。 NinjectをMVCアプリケーションにフックします。唯一の違いは、これを行うために異なるアプローチを使用することです。異なるアプローチを使用する理由は、NuGetパッケージが1つのファイルを追加することですぐに統合できるためです。そうしないと、global.asaxの複雑な変更が必要になります
注:NuGetパッケージを使用する場合に最初のアプローチを採用することにした場合(理由はありません)、App_Startフォルダーを削除し、WebActivatorおよびMicrosoft.Webへの参照を削除する必要があります。 。インフラストラクチャ。
VisualStudioからCleanupコマンドを実行したときに削除されなかった/ binフォルダー内のいくつかのdllを手動で削除することで、この問題を解決しました。
1つのアセンブリのみが「NinjectMVC3」クラスを持っていることを確認してください。a.dll、b.dllがすべてそのbinディレクトリにNinjectMVC3クラスを持っている場合、そのような間違いがあります!
私は約4時間、nugetパッケージをいじり回しましたが無駄でした。
最後に、gitubに移動して新しいリポジトリのクローンを作成し、最新のNinject.Web.Commonと最新のNinject2リリースビルドをダウンロードして、ローカルリリースビルドを実行しました。
次に、nugetパッケージを破棄し、新しくコンパイルされたアセンブリ "Ninject"、 "Ninject.Web.Common"、および "Ninject.Web.Mvc"へのアセンブリ参照を作成しました。プロジェクトが機能し始め、依存関係が解決されたコントローラーが作成されていました。
これは私のコードのように見えますが、nugetパッケージにも問題がある可能性があると思います...
public class MvcApplication : NinjectHttpApplication
{
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
protected override Ninject.IKernel CreateKernel()
{
// declaratively add the Ninject Modules that we have built to manage our dependencies...
var modules = new INinjectModule[]{
new RepoModule()
};
return new StandardKernel(modules);
}
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 } // Parameter defaults
);
}
}
これと同じ問題が発生しましたが、NuGetがNinjectMVC3.csファイルをWebアプリとDALライブラリの両方に追加したことが原因であることに気付きました。それが起こったことに気づいていませんでしたが、DALライブラリからファイルを削除すると問題ありませんでした。
NinjectHttpApplicationから継承し、OnApplicationStartedをオーバーライドしていたいくつかのわずかな違いで、同じ問題が発生しました。 nugetパッケージを使用する代わりに、 https://github.com/ninject/ninject.web.mvc からダウンロードすることで問題を解決しました。
参照を追加した後は、何もする必要はありませんでした。
NuGetを使用すると、App_startフォルダーが作成されているので、それを調べてください。
これを回答として追加するのは、まだ誰も言及していないためです。オフにしてリポジトリのクローンを作成する前に確認する価値があります。
私は、おそらく15のプロジェクトを含むソリューションで、この問題を突然経験しました。そのうちの3つはWebサイトです。明らかに問題を引き起こすものを変更せずにこの問題が発生し始めたとき、私はいずれかのサイトで作業していました:Ninjectをどこかに追加しただけでなく(すでにインストールされていて正常に動作しています)、グローバルasaxファイルはNinjectクラスから派生しておらず、App_Startフォルダーに問題はありませんでした。
NuGetなどをかなりいじって無駄にした後(未解決の参照に関するメッセージによってもたらされました-Ninjectが適切に参照されていなかったようですが、そうでした)、私は特に注意を払って変更したすべてのファイルを調べましたプロジェクトファイルと構成ファイル、そしてどういうわけかVisualStudioが他のWebサイトの1つを私が実行しようとしていたものへのプロジェクト参照として追加したことを発見しました。その結果、Ninject構成が2回実行されて問題が発生したため、根本的な原因は同じでしたが、失敗の方法が異なりました。
そのプロジェクト参照の理由はありませんでした。有効な依存関係ではなかったため、以前は存在しませんでした。手動で追加しなかったため、どのように発生したのかわかりませんが、削除するとすぐに問題が修正されました。