如何在StructureMap中为每个请求获取新实例?

时间:2012-11-29 17:06:05

标签: structuremap

对于使用StructureMap的每个ObjectFactory.Getinstance()调用,我想要一个新对象的实例。我无法找到它或自己弄明白。

AlwaysUnique没有这样做。

[TestMethod]
public void GetConcreteInstanceOf_ShouldReturn_DifferentInstance()
{
  ObjectFactory.Initialize(registry =>
  {
    // setup the singleton, so that it's new every time
    registry.For<ISystemData>().AlwaysUnique().Use(new SystemDataClient());
  });

  ISystemData result = ObjectFactory.GetInstance<ISystemData>();
  ISystemData result2 = ObjectFactory.GetInstance<ISystemData>();
  Assert.AreNotSame(result, result2);
}

2 个答案:

答案 0 :(得分:4)

如果您每次都想要一个新实例,那么根据定义,您不需要单个实例。不要传递实例,只需指定具体类型,StructureMap的默认行为每次都会为您提供一个新实例:

registry.For<ISystemData>().Use<SystemDataClient>();

答案 1 :(得分:1)

如果你有一个贪婪的构造函数干扰已经接受的答案,你也可以使用它:

registry.For<ISystemData>().Use(() => new SystemDataClient());