2

中信頼環境で依存関係注入を使いたいです。その目的のために、私はNinjectを選びました。コントローラーへの注入をどのようにセットアップするのですか?私はカスタムコントローラファクトリを作成しようとしたMVCコントローラの問題+媒体依存の依存関係注入(Ninject)

public class NinjectControllerFactory : DefaultControllerFactory 
    { 
     private readonly IKernel _kernel; 
     public NinjectControllerFactory(params IModule[] modules) 
     { 
      _kernel = new StandardKernel(modules); 
     } 

     public override IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName) 
     { 
      IController controller = base.CreateController(requestContext, controllerName); 
      _kernel.Inject(controller); 
      return controller; 
     } 
    } 

しかし、私はこのエラーに遭遇しています:

System.InvalidOperationException was unhandled by user code 
    Message="An error occurred while creating a controller of type 'xxx'. 

If the controller doesn't have a controller factory, ensure that it has a parameterless public constructor."

Ninjectまたはその他のIoCフレームワークが中の下で働いて得るためにどのように任意のアイデア信頼(反射を使用しないことを意味します)

答えて

1

コンテナの作成時にこのオプションを設定してください。

UseReflectionBasedInjection = true; 
0

グッド先端(しかし、あなたはfalseに設定意味した?)そのは次のようになるように、私は私のコンストラクタを変更:

public NinjectControllerFactory(params IModule[] modules) 
     { 
      _kernel = new StandardKernel(modules); 
      _kernel.Options.UseReflectionBasedInjection = false; 
     } 

これはしかし、同じ例外を取得します。

また、私はこのあまりに

protected override IController GetControllerInstance(Type controllerType) 
    { 
     return _kernel.Get(controllerType) as IController; 
    } 

ようGetControllerInstanceを上書きしようとしたが、それは、リフレクションを使用しているため、これはセキュリティ例外をスローします。

2

Ninject 1.xを中信頼で実行するには、UseReflectionBasedInjectionオプションをtrueに設定する必要があります。 Ninject 2.0はこの制限を受けません。

Reflectionは実際には中程度の信頼では保護されていませんが、少なくともNinjectが注入に使用する軽量コードの生成は少なくとも.NET 3.5 SP1より前です。

リフレクションベースの注入に切り替えると、コードは意図したとおりに機能するはずです。また、Ninject.Framework.Mvc(Ninject 1.x用)またはNinject.Web.Mvc(Ninject 2.0用)を参照することをお勧めします。これらの拡張機能は、あなたのために重い持ち上げを処理します。

+0

私はninject 2を使用していました。Ninject.Web.Mvcは中程度の信頼性のfirendly – Dan

2

最後にこの問題を解決することはできませんでしたが、私はUnityに切り替えました。

関連する問題