[英]Why 'Scope was not available' error happens when trying to register scoped component in Windsor .net core?
我正在使用温莎城堡。 我懂了
System.InvalidOperationException:'范围不可用。 您是否忘记了调用container.BeginScope()?
当我在MVC5配置文件中注册.NET标准库并且尝试使用Scoped生活方式时出现错误。 为什么会出现此错误?
我有一个MVC5项目,它引用了许多.NET Framework类库项目。 所有这些类库项目都具有Windsor Installer类,以便基于MVC5配置文件调用注册。 图书馆城堡。 温莎具有PerWebRequest
生活方式定义,并且在所有这些安装程序中都使用了它。
现在,我介绍了.NET标准类库并为所有以前的项目创建了安装程序类,除了我使用的是Scoped生活方式而不是PerWebRequest
(我在NETd Core中读到Scoped代替了PerWebRequest ),然后将注册代码添加到MVC5配置,就像其他库一样,现在我得到了异常:
System.InvalidOperationException:'范围不可用。 您是否忘记了调用container.BeginScope()?
我在这里看到了类似的问题: 范围不可用。 您是否忘了调用container.BeginScope()? 但是没有得到答案,区别是我试图在带有.NET Framework的MVC5中使用.NET标准库。
这是我的安装程序类:
public void Install(Castle.Windsor.IWindsorContainer container, Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore store)
{
container.Register(Component.For(typeof(IAzureSBConfiguration)).ImplementedBy(typeof(ConfigFileConfiguration)).LifestyleScoped());
}
这是配置文件注册:
<install assembly="AzureSBQueuing" />
我希望一切都能正常工作,因为在引入.NET标准类库时,一切正常。 为什么会发生错误?
.LifestyleScoped()
不能替代PerWebRequest
。 如果使用.LifestyleScoped()
注册服务, .LifestyleScoped()
必须在使用BeginScope
方法创建的范围内解决该服务。 但这与asp.net核心框架的AddScoped()
没有关系。
ASP.NET-MVC和ASP.NET-CORE是完全不同的框架,因此它们的Windsor集成以不同的包装提供,并且具有不同的作用域机制。
.LifestylePerWebRequest()
.LifestyleCustom<MsScopedLifestyleManager>()
: //github.com/volosoft/castle-windsor-ms-adapter 因此,.netstandard库中没有可以使用的通用注册。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.