[英]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.