Ninject Factory - 传入的“新”对象,而不是工厂方法中调用的对象

时间:2013-05-31 23:24:47

标签: ninject ninject-extensions

我正在使用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通过工厂传递。

任何人都知道为什么要传递一个新的“新鲜”对象而不是我传入的对象?

1 个答案:

答案 0 :(得分:0)

我已经重新编写了一些样本,似乎工作正常。你能提供更详细的代码示例吗?

我的实施

我已将动词创建更改为获取以匹配Ninject约定

public interface IGameOperationsFactory
{
    ISpinEvaluator GetSpinEvaluator(GameArtifact gameArtifact);
    IReelSpinner GetReelSpinner(GameArtifact gameArtifact);
}

Ninject配置

我已添加命名绑定以配置工厂

Bind<ISpinEvaluator>()
    .To<DefaultSpinEvaluatorImpl>()
    .Named("SpinEvaluator");

Bind<IReelSpinner>()
    .To<DefaultReelSpinnerImpl>()
    .Named("ReelSpinner");

Bind<IGameOperationsFactory>()
    .ToFactory();

ps:full sample with tests