StructureMap - 不要期待相同的对象
StructureMap - Don't Expect Same Object
我在我的 C# 应用程序中使用 structuremap 并得到了我不理解或不期望的行为。希望有人能解释我做错了什么或者为什么我的期望不正确!
当构造函数接受两个相同类型的参数时,我希望它们是相同类型的独立实例——而不是对同一实例的引用。下面的示例应用演示了这一点。
注册表:(not不使用Singleton()
public class DemoRegistry: Registry
{
public DemoRegistry()
{
For<IController>().Use<Controller>();
For<IAnInterface>().Use<AClass>();
}
}
我注入的类型:
public interface IAnInterface { }
public class AClass : IAnInterface {}
说明问题的class(我不希望 obj1 等于 obj2):
public interface IController {}
public class Controller : IController
{
private readonly IAnInterface _obj1;
private readonly IAnInterface _obj2;
public Controller(IAnInterface obj1, IAnInterface obj2)
{
_obj1 = obj1;
_obj2 = obj2;
bool sameObject = ob1 == obj2; // this is TRUE
}
}
最后是 运行 的 Main 方法:
static void Main(string[] args)
{
ObjectFactory.Configure(x => x.AddRegistry<DemoRegistry>());
IController c = ObjectFactory.GetInstance<IController>();
}
我正在使用 .Net 4.0 和 StructureMap 2.5.4。
总结一下:
- 为什么上面示例中的 obj1 == obj2?
希望这是清楚的,如果需要,我很乐意提供更多信息。
要在每次需要一个类型的实例时创建一个新实例,请使用 unique lifetime。
var unique = new UniquePerRequestLifecycle();
x.For<IAnInterface>().LifecycleIs(unique).Use<AClass>();
我在我的 C# 应用程序中使用 structuremap 并得到了我不理解或不期望的行为。希望有人能解释我做错了什么或者为什么我的期望不正确!
当构造函数接受两个相同类型的参数时,我希望它们是相同类型的独立实例——而不是对同一实例的引用。下面的示例应用演示了这一点。
注册表:(not不使用Singleton()
public class DemoRegistry: Registry
{
public DemoRegistry()
{
For<IController>().Use<Controller>();
For<IAnInterface>().Use<AClass>();
}
}
我注入的类型:
public interface IAnInterface { }
public class AClass : IAnInterface {}
说明问题的class(我不希望 obj1 等于 obj2):
public interface IController {}
public class Controller : IController
{
private readonly IAnInterface _obj1;
private readonly IAnInterface _obj2;
public Controller(IAnInterface obj1, IAnInterface obj2)
{
_obj1 = obj1;
_obj2 = obj2;
bool sameObject = ob1 == obj2; // this is TRUE
}
}
最后是 运行 的 Main 方法:
static void Main(string[] args)
{
ObjectFactory.Configure(x => x.AddRegistry<DemoRegistry>());
IController c = ObjectFactory.GetInstance<IController>();
}
我正在使用 .Net 4.0 和 StructureMap 2.5.4。
总结一下:
- 为什么上面示例中的 obj1 == obj2?
希望这是清楚的,如果需要,我很乐意提供更多信息。
要在每次需要一个类型的实例时创建一个新实例,请使用 unique lifetime。
var unique = new UniquePerRequestLifecycle();
x.For<IAnInterface>().LifecycleIs(unique).Use<AClass>();