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或对容器的回调),则会生成一个新的图形,因此每个图形实例都会生成一个新的图形。这很容易被忽略,用户不可能对此发出警告。因此,自己明确定义一个范围更安全、更清晰