根据简单喷射器文档的说法,每个图形存在一种生活方式,可以用来将对象的作用域限制在当前的图形上。但是这些文档并没有列出实现它的实际需要,我也找不到任何关于如何使用它的文档。在注册对象时,如何定义每个图形范围?
我本以为:
container.Register<ISomeType, SomeType>(Lifestyle.PerGraph);会存在,但在默认情况下不存在。
发布于 2015-03-03 15:40:56
这些文件指出:
这种生活方式可以用范围的一种生活方式来模拟。
换句话说,简单的喷射器不包含现成的PerGraph生活方式(文档并不是非常明确的,因此它可能需要改进一点)。诀窍是选择适当的作用域生活方式(取决于您的需求),并(隐式或显式地)启动范围并解析图形。例如:
var scopedLifestyle = new AsyncScopedLifestyle();
container.Register<ISomeType, SomeType>(scopedLifestyle);
using (AsyncScopedLifestyle.BeginScope(container))
{
var some = container.GetInstance<SomeRootObjectDependingOnSomeType>();
some.Execute();
}简单喷射器中不存在每个图的生活方式的主要原因是它可能非常不可靠。如果部分图的构建被延迟(例如,由于使用了Lazy、Func或对容器的调用),则会产生一个新的图,因此每个图实例都会有一个新的图。这很容易被忽略,而且简易喷射器诊断服务不可能对此发出警告。因此,更安全、更清晰的是自己明确地定义范围。
https://stackoverflow.com/questions/28834216
复制相似问题