[英]Using IHostingEnvironment in .NetCore library
我構建了一個 ASP.NET Core 應用程序,並為單元測試創建了一個 .NET Core 類庫。
我想在我的庫中使用IHostingEnvironment
(以獲取文件的物理路徑),因此我已將此行添加到我的 ASP.NET Core 應用程序的 Startup.cs 中:
services.AddSingleton<IHostingEnvironment>();
在庫中,我添加了對我的 ASP.NET 應用程序的引用,在我的類中我寫了這個:
private IHostingEnvironment _env;
public Class1(IHostingEnvironment env)
{
_env = env;
}
但是當我運行它時,它給了我這個錯誤:
以下構造函數參數沒有匹配的夾具日期:IHostingEnvironment env
問題是什么? 如何在 .NET Core 類庫中使用它?
編輯:我也嘗試使用它:
IServiceCollection services = new ServiceCollection();
services.AddSingleton<IHostingEnvironment>();
IServiceProvider provider = services.BuildServiceProvider();
IHostingEnvironment service = provider.GetService<IHostingEnvironment>();
var p = service.WebRootPath;
最后一個給了我這個錯誤:
無法為服務類型“Microsoft.AspNetCore.Hosting.IHostingEnvironment”實例化實現類型“Microsoft.AspNetCore.Hosting.IHostingEnvironment”
注意: services.AddSingleton<IHostingEnvironment>();
您注冊手段IHostingEnvironment
為實現IHostingEnvironment
在單身范圍(總是重復使用)。
由於您無法創建接口的實例,因此會出現此錯誤。
定義要創建的類(實現IHostingEnvironment
),例如:
services.AddSingleton<IHostingEnvironment>(new HostingEnvironment());
在WebHostBuilder
構造函數中的第一行是:
this._hostingEnvironment = (IHostingEnvironment) new HostingEnvironment();
該托管環境稍后會由 webhost 構建器填充更多設置。
您應該查看他們的 github 頁面或反編譯源代碼: https : //github.com/aspnet/Hosting
注意: HostingEnvironment
大部分屬性/設置都是在HostingEnvironment
的Build()
方法上WebHostBuilder
。 如果您想自己進行WebHostBuilder
訂量/測試,您應該自己設置這些屬性,或者在您的測試中也包括WebHostBuilder
。
對於我的 .net 類庫,我所要做的就是為 2.1.0 版安裝以下 nuget 包:
Microsoft.AspNetCore.Hosting.Abstractions
https://www.nuget.org/packages/Microsoft.AspNetCore.Hosting.Abstractions/
然后我只是將 IHostingEnvironment 注入到我的構造函數中。
我什至不需要修改 Startup.cs
這在 .net 核心類庫和控制台應用程序中都對我有用:
使用參考,
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting.Internal;
添加DI注冊,
services.AddSingleton<IHostingEnvironment, HostingEnvironment>();
一個筆記供我參考,因為我在這里結束了。
如果在類庫中以 netstandard (netstandard2.0) 為目標,請從 NuGet 添加 Microsoft.Extensions.Hosting.Abstractions 以獲取 IHostingEnvironment 接口,而無需任何實現。
我知道問題指定了 .net 核心,無論如何......可能會幫助那些我所在的地方。
試試這個,很簡單
private IHostEnvironment env;
public Startup(IHostEnvironment env)
{
this.env = env;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IHostEnvironment>(env);
}
然后你可以在你的課堂上使用它
private IHostingEnvironment _env;
public Class1(IHostingEnvironment env)
{
_env = env;
}
希望它能完成工作^_^
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.