Ninject Factory Extensions を使用して、注入されたサービスとカスタム値を持つオブジェクトを作成できるようにしています
それで:
public interface IGameOperationsFactory
{
ISpinEvaluator Create(GameArtifact game);
IReelSpinner CreateSpinner(GameArtifact game);
}
次にモジュールで:
Bind<IGameOperationsFactory>().ToFactory().InSingletonScope();
Bind<ISpinEvaluator>().To<DefaultSpinEvaluatorImpl>();
Bind<IReelSpinner>().To<DefaultReelSpinnerImpl>();
実際のファクトリはクラスのコンストラクターに注入され、次のように使用されます。
_spinner = _factory.CreateSpinner(_artifact);
_spinEval = _factory.Create(_artifact);
_artifact のタイプは GameArtifact です
次に、各実装のコンストラクタ サービスに加えて、渡されたオブジェクトが注入されます。GameArtifact は最初のコンストラクターで正常に渡され、2 番目のコンストラクターでは「新しい」GameArtifact が渡されます。つまり、null ではなく、フレームワークがちょうど呼び出したかのようにデフォルト値のみを持つものです。
new GameArtifact()
既存のものを渡す代わりに!
2 つのオブジェクトのコンストラクターは非常に似ていますが、動作しないコンストラクターは次のようになります。
[Inject]
public DefaultReelSpinnerImpl(GameArtifact ga, IGameOperationsFactory factory, IRandomService serv)
{
_rand = serv;
_ra = ga.Reels;
_mainReels = factory.Create(_ra);
_winLine = ga.Config.WinLine;
}
ファクトリとサーブが Ninject によって注入され、ga がファクトリ経由で渡されることが想定されている場所。
私が渡したものではなく、新しい「新鮮な」オブジェクトが渡された理由は誰にも分かりますか??