繁体   English   中英

尝试在Windsor .net Core中注册作用域组件时,为什么会发生“作用域不可用”错误?

[英]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集成以不同的包装提供,并且具有不同的作用域机制。

因此,.netstandard库中没有可以使用的通用注册。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM