4

.Net MVC 3.0アプリケーションがあり、Ninject3.0を使用しています。nugetをインストールしませんでした。Ninject.dll、Ninject.Web.Common.dll、Ninject.Web.Mvc.dll(およびその他2つ)を参照しています。カスタムHttpModuleに依存関係を挿入したいのですが、NinjectHttpApplicationで機能させる方法がわかりません。

このエラーがあります:

IntPtrのアクティブ化中にエラーが発生しまし
た一致するバインディングが利用できず、タイプは自己バインドできません。
アクティベーションパス:
3)タイプFunc {IKernel}のコンストラクターのパラメーターメソッドへの依存性IntPtrの
注入2)タイプHttpApplicationInitializationHttpModuleのコンストラクターのパラメーターlazyKernelへの依存性Func {IKernel}の注入
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.Config

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

このバインディングは私の問題を解決します:

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

しかし、githubのこの投稿によると、私はそれをすることになっていない。

誰かが私が間違っていることや行方不明になっていることを教えてもらえますか?

4

1 に答える 1

3

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

残念ながら、それをアンロードできる良い点はありません。

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

于 2012-05-14T23:24:32.130 に答える