8

既にバインドされている場合、依存関係をバインドしないように Ninject を構成することは可能ですか?

例えば

以下を含む Client1 と呼ばれるモジュールをロードすると:

public class Client1Module:NinjectModule
{
    public override void Load()
    {
         Bind<IService>.To<FancyService>()
    }
}

次に、Base を含むモジュールをロードします。

public class BaseModule:NinjectModule
{
    public override void Load()
    {
          Bind<IService>.To<BasicService>()
    }
}

BasicService がバインドされておらず、システムが常に FancyService を使用していることを確認したいと考えています。FancyService が存在するかどうかは、設計時にはわかりません。Client1 モジュールが見つかった場合はロードされます。

すべてのインジェクションなどの周りに反復的な定型コードの束を本当に望んでいません.クライアントモジュールですべてを変更できる依存関係が50〜60あるためです。

何か案は?

4

2 に答える 2

7

最初にベースモジュールをロードし、次にクライアントモジュールをロードすると仮定すると、使用できると思います

Rebind<IService>.To<FancyService>()

効きそうだ

于 2012-09-07T14:11:01.383 に答える
7

Client1Module の後に BaseModule がロードされていることを確認する必要があります。

   public class BaseModule: NinjectModule
    {
        public override void Load()
        {
            if (!Kernel.GetBindings(typeof(IService)).Any())
            {
                Bind<IService>().To<BasicService>();
            }
        }
    }
于 2012-09-07T11:04:21.253 に答える