我正在使用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在第一个构造函数中成功传递,在第二个构造函数中传递一个“new”GameArtifact,即不是null,而是一个只有默认值,就像框架刚刚调用
一样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通过工厂传递。
任何人都知道为什么要传递一个新的“新鲜”对象而不是我传入的对象?
答案 0 :(得分:0)
我已经重新编写了一些样本,似乎工作正常。你能提供更详细的代码示例吗?
我已将动词创建更改为获取以匹配Ninject约定
public interface IGameOperationsFactory
{
ISpinEvaluator GetSpinEvaluator(GameArtifact gameArtifact);
IReelSpinner GetReelSpinner(GameArtifact gameArtifact);
}
我已添加命名绑定以配置工厂
Bind<ISpinEvaluator>()
.To<DefaultSpinEvaluatorImpl>()
.Named("SpinEvaluator");
Bind<IReelSpinner>()
.To<DefaultReelSpinnerImpl>()
.Named("ReelSpinner");
Bind<IGameOperationsFactory>()
.ToFactory();