我构建了一个ASP。NET核心应用程序,我创建了一个用于单元测试的.NET核心类库。
我想在我的库中使用IHostingEnvironment
(获取文件的物理路径),因此我在启动时添加了这一行。我的ASP。NET核心应用程序:
services.AddSingleton<IHostingEnvironment>();
在库中,我添加了对我的ASP.NET应用程序的引用,在我的类中,我写了这个:
private IHostingEnvironment _env;
public Class1(IHostingEnvironment env)
{
_env = env;
}
但是当我运行它时,它会给我这个错误:
以下构造函数参数没有匹配的设备日期:IHostingEnvironment env
有什么问题?如何在.NET核心类库中使用它?
编辑:我也尝试使用这个:
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”
这在.net核心类库和控制台应用程序中都对我有用:
使用引用,
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting.Internal;
添加DI注册,
services.AddSingleton<IHostingEnvironment, HostingEnvironment>();
对于我的 .net 类库,我所要做的就是为版本 2.1.0 安装以下 nuget 包:
Microsoft.AspNetCore.Hosting.Abstractions
https://www.nuget.org/packages/Microsoft.AspNetCore.Hosting.Abstractions/
然后我只是将IHostingEnvironment注入到我的构造函数中。
我甚至不需要修改Startup.cs
注意:<code>services.AddSingleton
由于您无法创建接口的实例,因此会出现此错误。
定义要创建的类(实现< code>IHostingEnvironment),例如:
services.AddSingleton<IHostingEnvironment>(new HostingEnvironment());
在 WebHostBuilder
中,构造函数中的第一行是:
this._hostingEnvironment = (IHostingEnvironment) new HostingEnvironment();
此托管环境稍后由Webhost构建器填充更多设置。
您应该查看他们的github页面或反编译源代码:https://github.com/aspnet/Hosting
注意:HostingEnvironment
的大多数属性/设置都是在WebHostBuilder
的Build()
方法上设置的。如果您想自己进行moq/测试,则应自己设置这些属性,或者只是在测试中包含WebHostBuilder
。
主要内容:面向读者,前提条件.NET Core是Microsoft最新的通用开发平台。它可以在不同的平台上工作,并且已经被重新设计,使.NET变得快速,灵活和现代。 .NET核心恰好是微软的主要贡献之一。 开发人员现在可以使用.NET构建Android,iOS,Linux,Mac和Windows应用程序,全部使用开放源代码。 面向读者 本教程是为希望了解.NET Core基础知识的软件程序员设计的。 前提条件 要求读者应该对
尝试此获取无效字符串格式问题。谁能帮我一下。
由于我在.netcore方面的知识非常有限,如果有人能给我指明正确的方向,我将不胜感激。
我试图确定.NET核心应用程序是否容易受到XML外部实体(XXE)注入攻击。我读了这个OWASP XXE预防备忘单,它告诉我,例如,在4.5.2之前的.NET Framework版本中,
我有一个控制台应用程序,将使用DI提供配置(选项模式),日志记录和其他服务引用的应用程序内的服务。 我有一个问题,日志记录正在为Info/Warning/Error/Critical工作,但调试和跟踪没有显示。我已将控制台级别设置为跟踪。如果我只是创建一个记录器工厂,那么所有日志都会显示出来。 听起来像是在使用默认值。对于在DI服务集合中创建的记录器,是否有其他方法来配置日志级别? 我试着在服务集
通过postman从API到数据库的post请求给了我以下响应:{“message”:“无效的对象名‘Accounts’。”} 这些是我的C#代码,我不知道我做错了什么或我错过了什么。请帮助。 > 帐户控制器。 使用AutoMapper;使用Microsoft。AspNetCore。Http;使用Microsoft。AspNetCore。Mvc;使用系统;使用系统。集合。通用;使用非洲生物医学测试