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