首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实施PerGraph生活方式

如何实施PerGraph生活方式
EN

Stack Overflow用户
提问于 2015-03-03 14:23:57
回答 1查看 197关注 0票数 2

根据简单喷射器文档的说法,每个图形存在一种生活方式,可以用来将对象的作用域限制在当前的图形上。但是这些文档并没有列出实现它的实际需要,我也找不到任何关于如何使用它的文档。在注册对象时,如何定义每个图形范围?

我本以为:

代码语言:javascript
复制
container.Register<ISomeType, SomeType>(Lifestyle.PerGraph);

会存在,但在默认情况下不存在。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-03 15:40:56

这些文件指出:

这种生活方式可以用范围的一种生活方式来模拟。

换句话说,简单的喷射器不包含现成的PerGraph生活方式(文档并不是非常明确的,因此它可能需要改进一点)。诀窍是选择适当的作用域生活方式(取决于您的需求),并(隐式或显式地)启动范围并解析图形。例如:

代码语言:javascript
复制
var scopedLifestyle = new AsyncScopedLifestyle();

container.Register<ISomeType, SomeType>(scopedLifestyle);

using (AsyncScopedLifestyle.BeginScope(container))
{
    var some = container.GetInstance<SomeRootObjectDependingOnSomeType>();
    some.Execute();
}

简单喷射器中不存在每个图的生活方式的主要原因是它可能非常不可靠。如果部分图的构建被延迟(例如,由于使用了Lazy、Func或对容器的调用),则会产生一个新的图,因此每个图实例都会有一个新的图。这很容易被忽略,而且简易喷射器诊断服务不可能对此发出警告。因此,更安全、更清晰的是自己明确地定义范围。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28834216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档