簡體   English   中英

在 .NetCore 庫中使用 IHostingEnvironment

[英]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());

后台 dotnet 核心(托管 nuget 包)

WebHostBuilder構造函數中的第一行是:

this._hostingEnvironment = (IHostingEnvironment) new HostingEnvironment();

該托管環境稍后會由 webhost 構建器填充更多設置。

您應該查看他們的 github 頁面或反編譯源代碼: https : //github.com/aspnet/Hosting

注意: HostingEnvironment大部分屬性/設置都是在HostingEnvironmentBuild()方法上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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM