C# DryIoc作用域是否现在包括父作用域?

C# DryIoc作用域是否现在包括父作用域?,c#,dependency-injection,dryioc,C#,Dependency Injection,Dryioc,下面的代码在DryIOC2.x中工作。我刚更新到4.x。代码不再工作(请参见下面的异常)。似乎4.x将“ScopedTo”数据视为非独占数据,而在2.x中,它们是该范围的独占数据——其他范围无法直接使用它们。现在如何获得2.x行为?异常列出了几种补救措施,但哪种补救措施与2.x行为相匹配 使用系统; 使用DryIoc; 命名空间TestDryIoc { 公共接口IDep{} 公共接口所有者 { IDep Dep{get;} } 公共类Dep1:IDep{} 公共类Dep2:IDep{} 公共类所

下面的代码在DryIOC2.x中工作。我刚更新到4.x。代码不再工作(请参见下面的异常)。似乎4.x将“ScopedTo”数据视为非独占数据,而在2.x中,它们是该范围的独占数据——其他范围无法直接使用它们。现在如何获得2.x行为?异常列出了几种补救措施,但哪种补救措施与2.x行为相匹配

使用系统;
使用DryIoc;
命名空间TestDryIoc
{
公共接口IDep{}
公共接口所有者
{
IDep Dep{get;}
}
公共类Dep1:IDep{}
公共类Dep2:IDep{}
公共类所有者1:IOOwner
{
公有人1(IDep部门)
{
Dep=Dep;
}
公共IDep Dep{get;}
}
公共类所有者2:IOOwner
{
公有人2(IDep部门)
{
Dep=Dep;
}
公共IDep Dep{get;}
}
班级计划
{
静态void Main(字符串[]参数)
{
var container=新容器();
container.Register(重用.InResolutionScopeOf());
container.Register(重用.InResolutionScopeOf());
RegisterMany(Reuse.Singleton,setup:setup.With(openResolutionScope:true));
RegisterMany(Reuse.Singleton,setup:setup.With(openResolutionScope:true));
container.Resolve();
}
}
}
我在v4.2.3中遇到的异常:

DryIoc.ContainerException: code: ExpectedSingleDefaultFactory; message: Expecting single default registration but found many:
(DefaultKey(0), {FactoryID=144, ImplType=TestDryIoc.Dep1, Reuse=Scoped {Name={ServiceType=TestDryIoc.Owner1}, Lifespan=100}}), 
(DefaultKey(1), {FactoryID=145, ImplType=TestDryIoc.Dep2, Reuse=Scoped {Name={ServiceType=TestDryIoc.Owner2}, Lifespan=100}, AsResolutionCall})
when resolving Resolution call dependency TestDryIoc.IDep (IsSingletonOrDependencyOfSingleton, IsResolutionCall)
  in Resolution root Singleton TestDryIoc.Owner2 FactoryId=147 (IsSingletonOrDependencyOfSingleton, IsResolutionCall)
  from container without scope.
Please identify service with key, or metadata, or use Rules.WithFactorySelector to specify single registered factory.
  at DryIoc.Throw.It(Int32 error, Object arg0, Object arg1, Object arg2, Object arg3) in /_/src/DryIoc/Container.cs:12902
  at DryIoc.Container.DryIoc.IContainer.GetServiceFactoryOrDefault(Request request) in /_/src/DryIoc/Container.cs:1217
  at DryIoc.Container.DryIoc.IContainer.ResolveFactory(Request request) in /_/src/DryIoc/Container.cs:1039
  at DryIoc.Container.ResolveAndCacheKeyed(Int32 serviceTypeHash, Type serviceType, Object serviceKey, IfUnresolved ifUnresolved, Object scopeName, Type requiredServiceType, Request preResolveParent, Object[] args) in /_/src/DryIoc/Container.cs:468
  at DryIoc.Container.DryIoc.IResolver.Resolve(Type serviceType, Object serviceKey, IfUnresolved ifUnresolved, Type requiredServiceType, Request preResolveParent, Object[] args) in /_/src/DryIoc/Container.cs:427
  at DryIoc.Interpreter.InterpretResolveMethod(IResolverContext resolver, IList`1 callArgs, Object paramExprs, Object paramValues, ParentLambdaArgs parentArgs, Boolean useFec, Object& result) in /_/src/DryIoc/Container.cs:3502
  at DryIoc.Interpreter.TryInterpretMethodCall(IResolverContext r, Expression expr, Object paramExprs, Object paramValues, ParentLambdaArgs parentArgs, Boolean useFec, Object& result) in /_/src/DryIoc/Container.cs:3386
  at DryIoc.Interpreter.TryInterpret(IResolverContext r, Expression expr, Object paramExprs, Object paramValues, ParentLambdaArgs parentArgs, Boolean useFec, Object& result) in /_/src/DryIoc/Container.cs:2915
  at DryIoc.Interpreter.TryInterpret(IResolverContext r, Expression expr, Object paramExprs, Object paramValues, ParentLambdaArgs parentArgs, Boolean useFec, Object& result) in /_/src/DryIoc/Container.cs:2818
  at DryIoc.Interpreter.TryInterpretAndUnwrapContainerException(IResolverContext r, Expression expr, Boolean useFec, Object& result) in /_/src/DryIoc/Container.cs:2753
  at DryIoc.Factory.ApplyReuse(Expression serviceExpr, Request request) in /_/src/DryIoc/Container.cs:9825
  at DryIoc.Factory.GetExpressionOrDefault(Request request) in /_/src/DryIoc/Container.cs:9734
  at DryIoc.Container.ResolveAndCacheKeyed(Int32 serviceTypeHash, Type serviceType, Object serviceKey, IfUnresolved ifUnresolved, Object scopeName, Type requiredServiceType, Request preResolveParent, Object[] args) in /_/src/DryIoc/Container.cs:499
  at DryIoc.Container.DryIoc.IResolver.Resolve(Type serviceType, Object serviceKey, IfUnresolved ifUnresolved, Type requiredServiceType, Request preResolveParent, Object[] args) in /_/src/DryIoc/Container.cs:427
  at DryIoc.Interpreter.InterpretResolveMethod(IResolverContext resolver, IList`1 callArgs, Object paramExprs, Object paramValues, ParentLambdaArgs parentArgs, Boolean useFec, Object& result) in /_/src/DryIoc/Container.cs:3502
  at DryIoc.Interpreter.TryInterpretMethodCall(IResolverContext r, Expression expr, Object paramExprs, Object paramValues, ParentLambdaArgs parentArgs, Boolean useFec, Object& result) in /_/src/DryIoc/Container.cs:3386
  at DryIoc.Interpreter.TryInterpret(IResolverContext r, Expression expr, Object paramExprs, Object paramValues, ParentLambdaArgs parentArgs, Boolean useFec, Object& result) in /_/src/DryIoc/Container.cs:2915
  at DryIoc.Interpreter.TryInterpretAndUnwrapContainerException(IResolverContext r, Expression expr, Boolean useFec, Object& result) in /_/src/DryIoc/Container.cs:2753
  at DryIoc.Container.ResolveAndCache(Int32 serviceTypeHash, Type serviceType, IfUnresolved ifUnresolved) in /_/src/DryIoc/Container.cs:406
  at DryIoc.Container.DryIoc.IResolver.Resolve(Type serviceType, IfUnresolved ifUnresolved) in /_/src/DryIoc/Container.cs:353
  at DryIoc.Resolver.Resolve[TService](IResolver resolver, IfUnresolved ifUnresolved) in /_/src/DryIoc/Container.cs:7580
  at TestDryIoc.Program.Main(String[] args) in ```

看起来像个虫子。我已经在DryIoc存储库中创建了相应的问题。请把讨论转移到那里

此问题仅在
重用.Singleton
父服务时出现。因此,在问题得到解决之前,解决方法可能是更改
所有者
重用,或者插入人工作用域,以充当这些服务的单例

更新
DryIoc v4.2.4及其修复程序在NuGet上发布了

似乎是一个bug。我已经在DryIoc存储库中创建了相应的问题。请把讨论转移到那里

此问题仅在
重用.Singleton
父服务时出现。因此,在问题得到解决之前,解决方法可能是更改
所有者
重用,或者插入人工作用域,以充当这些服务的单例

更新 DryIoc v4.2.4及其修复程序已在NuGet上发布