我正在使用 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 在第一个构造函数中成功传递,在第二个构造函数中传递了一个“新的”GameArtifact,即不是空的,而是只有默认值的,就好像刚刚调用了框架一样
new GameArtifact()
而不是传入已经存在的!
这两个对象的构造函数非常相似,但不起作用的那个看起来像:
[Inject]
public DefaultReelSpinnerImpl(GameArtifact ga, IGameOperationsFactory factory, IRandomService serv)
{
_rand = serv;
_ra = ga.Reels;
_mainReels = factory.Create(_ra);
_winLine = ga.Config.WinLine;
}
工厂和服务由 Ninject 注入,而 ga 应该通过工厂传入。
任何人都知道为什么传入一个新的“新鲜”对象而不是我传入的那个?