2017-04-23 1 views
0

NinjectフレームワークでIoCを使用するコードをリファクタリングしようとしています。これまでは、渡すコンストラクタパラメータがないシナリオでは、クラスに正常に挿入することができました。しかし、パラメータを渡すことは難しいです。これは、以下のバインディングクラスの3番目のバインディングです。クラスNinjectを使用してコンストラクタパラメータで新しいオブジェクトをインスタンス化する

public class Bindings : NinjectModule 
    { 
     public override void Load() 
     { 
      Bind<ILogger>().To<Logger>(); 
      Bind<IPlayerDatadao>().To<PlayerDatadao>(); 
      Bind<IPlayerScores>().To<PlayerScores>(); 
     } 
    } 

ロガークラスのバインド

は、パラメータなしのコンストラクタを持ち、Ninjectに転送したときに正常に動作します。

成功

// IoC creation 
    var kernel = new StandardKernel(); 
    kernel.Load(Assembly.GetExecutingAssembly()); 

    //Log User details 
    var logger = kernel.Get<ILogger>(); 
    logger.LogVisitorDetails(); 

しかし、以下の私の試みは

失敗

 string priceString = Foo(); 
     string pointsString = Bar(); 

     return kernel.Get<IPlayerScores>(new[] { new ConstructorArgument("pointsString", pointsString), new ConstructorArgument("points", priceString) }); 

例外をスローこれはコンストラクタを持つクラスです。私は本当に私はバインディングクラスまたは私は本当によ注入

+2

'PlayerScores'はコンポーネント(動作のあるクラス)のようではありません。これはデータコンテナです。これらの種類のオブジェクト(DTOビューモデル、メッセージ、エンティティ)は、DIコンテナによって構築されるべきではありません。また、PlayerScopesがコンポーネントであっても(その名前が意味するものではない)、ランタイムデータを挿入しないでください(https://www.cuttingedge.it/blogs/steven/pivot/entry.php ?id = 99)。 – Steven

答えて

関連する問題