簡體   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