我创建了一个自定义范围访问器(它只是返回 DefaultLifetimeScope),以便能够添加自定义范围的生活方式。然后该组件被注册为
Component
.For<..>
.LifestyleScoped<CustomScope>()
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何实际启动新的 CustomScope 范围/生命周期。该文档显示使用开始一个新范围
using (Container.BeginScope()) {
// ..
}
Run Code Online (Sandbox Code Playgroud)
但我的目标是创建/开始/启动特定范围,而不是通用LifestyleScoped()注册。新的作用域应该只影响显式注册到 CustomScope 的组件;不是通用范围组件或针对其他范围生活方式注册的组件。
开始(我的自定义范围)范围/生命周期的过程是什么?
请链接至相关文档;正如我所问,因为我无法轻易找到它。该代码使用Castle Windsor 3.3。
背景:
我来自 Autofac,正在寻找相当于每个匹配生命周期范围的实例来在 EF 上下文上建立 UoW。“每个请求”可能有多个 UoW,并且不同的存储库可能有不同的 UoW - 我还希望将来支持嵌套。
虽然有很多文章讨论创建 UoW 模式,但它们[全部]都与某些上下文(例如 HTTP 或 WFC 请求)绑定(错误地,IMOHO) - 而这不是这个问题的目的。我特别感兴趣的是如何启动一个自定义作用域,该作用域向下流过调用图并“存在于”using 块内。
笔记:
BoundTo()(和LifestyleBoundTo()/ )生活方式LifestyleBoundToNearest()与对象图相反(并且需要改变类型),并且切换到这样的生活方式严格来说并不是这个问题的解决方案/答案。但是,如果能为他们提供一个好的案例..
scope castle-windsor using-statement inversion-of-control castle-windsor-3
在WindsorContainer的构造过程中,什么原因导致MethodAccessException?
System.MethodAccessException: Attempt by method 'Castle.MicroKernel.SubSystems.Configuration.DefaultConfigurationStore..ctor()' to access method 'System.Collections.Generic.Dictionary`2<System.__Canon,System.__Canon>..ctor()' failed.
at Castle.MicroKernel.SubSystems.Configuration.DefaultConfigurationStore..ctor()
at Castle.MicroKernel.DefaultKernel.RegisterSubSystems()
at Castle.MicroKernel.DefaultKernel..ctor(IDependencyResolver resolver, IProxyFactory proxyFactory)
at Castle.MicroKernel.DefaultKernel..ctor()
at Castle.Windsor.WindsorContainer..ctor()
.NET 4.7.2 温莎城堡 3.3.0