Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何实施PerGraph生活方式_C#_.net_Dependency Injection_Simple Injector_Object Lifetime - Fatal编程技术网

C# 如何实施PerGraph生活方式

C# 如何实施PerGraph生活方式,c#,.net,dependency-injection,simple-injector,object-lifetime,C#,.net,Dependency Injection,Simple Injector,Object Lifetime,根据,存在可用于将对象范围限制为当前图形的逐图生活方式。但是文档没有列出实现它实际需要做什么,我也没有在网上找到任何关于如何使用它的文档。在注册对象时,如何为其定义每个图形范围 我会想: container.Register<ISomeType, SomeType>(Lifestyle.PerGraph); container.Register(lifesture.PerGraph); 将存在,但默认情况下不存在。文档说明: 这种生活方式可以通过使用其中一种生活方式来模拟 换句话

根据,存在可用于将对象范围限制为当前图形的逐图生活方式。但是文档没有列出实现它实际需要做什么,我也没有在网上找到任何关于如何使用它的文档。在注册对象时,如何为其定义每个图形范围

我会想:

container.Register<ISomeType, SomeType>(Lifestyle.PerGraph);
container.Register(lifesture.PerGraph);

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

文档说明:

这种生活方式可以通过使用其中一种生活方式来模拟

换句话说,Simple Injector不包含开箱即用的PerGraph生活方式(文档中没有明确说明这一点,因此可能需要改进)。诀窍是选择适当的范围生活方式(取决于您的需求)并(隐式或显式)启动范围并解析图表。例如:

var scopedLifestyle = new AsyncScopedLifestyle();

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

using (AsyncScopedLifestyle.BeginScope(container))
{
    var some = container.GetInstance<SomeRootObjectDependingOnSomeType>();
    some.Execute();
}
var scopedLifestyle=new AsyncScopedLifestyle();
容器。注册表(scopedLifestyle);
使用(AsyncScopedLifestyle.BeginScope(容器))
{
var some=container.GetInstance();
一些。执行();
}
简单喷油器中不存在按图生活方式的主要原因是它可能非常不可靠。如果部分图形的构建被延迟(例如,由于使用了Lazy、Func或对容器的回调),则会生成一个新的图形,因此每个图形实例都会生成一个新的图形。这很容易被忽略,用户不可能对此发出警告。因此,自己明确定义一个范围更安全、更清晰