2012-05-14 5 views
4

私は.Net MVC 3.0アプリケーションを持っており、Ninject 3.0を使用しています。私はナゲットを取り付けなかった。私はNinject.dll、Ninject.Web.Common.dll、Ninject.Web.Mvc.dll(および他2名)を参照しています。私はカスタムHttpModuleに依存関係を注入したいので、NinjectHttpApplicationでそれを動作させる方法を理解できません。NinjectHttpApplication(nugetなし)を使ってHttpModuleに依存関係を挿入する方法は?

私はこのエラーを持っている:のIntPtr
を活性化

エラーが一致するバインディングが用意されていない、とタイプが自己バインド可能ではありません。種類のコンストラクタのパラメータlazyKernelに依存性のFunc {のiKernel}のタイプのFunc {のiKernel}
2)注入のコンストラクタのパラメータ法に
3)依存性のIntPtrの注射HttpApplicationInitializationHttpModule
1)のIHttpModuleの要求:
活性化経路は

Global.asaxの

public class MvcApplication: NinjectHttpApplication 
{ 
    ... 
    protected override void OnApplicationStarted() 
    { 
     base.OnApplicationStarted(); 

     AreaRegistration.RegisterAllAreas(); 

     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 
    } 

    protected override IKernel CreateKernel() 
    { 
     var modules = new INinjectModule[] 
     { 
      new ServiceModule() 
     }; 

     IKernel kernel = new StandardKernel(modules); 

     return kernel; 
    } 
} 

Web.C:ここ

コードです

kernel.Bind<Func<IKernel>>().ToMethod(c =>() => this.Kernel); 

しかし、このに従って:

<httpModules> 
    <add name="NinjectHttpModule" type="Ninject.Web.Common.NinjectHttpModule"/> 
</httpModules> 

CustomHttpModule.cs

public class CustomHttpModule : IHttpModule 
{ 
    private ITesttService service; 
    public CustomHttpModule(ITesttService service) 
    { 
     this.service = service; 
    } 
    ... 
} 

ServiceModule.cs

public class ServiceModule : NinjectModule 
{ 
    public override void Load() 
    { 
     ... 
     Kernel.Bind<ITestService>().To<TestService>(); 
     Kernel.Bind<IHttpModule>().To<CustomHttpModule>().InSingletonScope(); 
    } 
} 

この結合は私の問題を解決しonfig githubで、私はそれをするはずはありません。

あなたは誰かが私が間違っているか不足していることを教えてもらえますか?

答えて

3

現在、NinjectHttpApplicationから派生するときにNinjectHttpModuleを使用する良い方法はありません。ブートストラップは、両方の方法でHttpApplicationInitializationHttpModuleを登録し、NinjectHttpModuleがロードされると同時にこのモジュールもロードされます。

残念ながら、アンロードすることはできません。

NinjectHttpApplicationから派生してWebActivatorを使用することをお勧めします。それを実行させるための唯一の正しい方法です。アプリケーションをそのようにセットアップするために必ずしもナゲットを使う必要はありません。同じファイルを手動で追加して、必要なすべてのアセンブリを手動で参照することもできます。

+0

手作業で追加する必要があるファイルのサンプル/ドキュメントがありますか? – Ben

+1

Nervermind、私は自分のプロジェクトのコピーでナゲットを試しました。私が必要としていたのは[Ninject wiki](https://github.com/ninject/ninject.web.mvc/wiki/)のこのページにあります。 MVC3アプリケーションの設定)。基本的には、新しいApp_StartフォルダにあるNinjectWebCommonクラスのコードをコピーするだけで済みます。それだけです! しかし、1つの質問:App_Startの方が良ければ、なぜGlobal.asaxのNinjectHttpApplicationから派生できますか? – Ben

関連する問題