- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试根据 Options pattern 使用强类型的 json 配置设置在 .net 核心中。到目前为止的所有示例都显示了将强类型设置类注入(inject) Controller 是多么容易,但我需要在中间件类中使用它(非常类似于 this question,但在尝试之后我没有进一步推进)。
那么,设置:
mysettings.json
{
"MySettings": {
"Name": "Some Name from config",
"Description": "Some Description from config"
}
}
mysettings.cs
public class MySettings
{
public string Name { get; set; } = "Default name";
public string Description { get; set; } = "Default description";
}
startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
// Add functionality to inject IOptions<T>
services.AddOptions();
// Add our Config object so it can be injected
services.Configure<MySettings>(Configuration.GetSection("MySettings"));
services.AddSingleton<IMySettingsService, MySettingsService>();
}
MysettingsService.cs
public class MysettingsService : IMysettingsService
{
private MySettings mySettings { get; set; }
public MysettingsService (MySettings _mySettings)
{
mySettings = _mySettings.value;
}
public string GetName()
{
return mySettings.Name;
}
}
我如何着手实例化 MysettingsService.cs 并注入(inject) IOptions<MySettings>
进入类构造函数以便调用 GetName 方法?
最佳答案
几点:
services.AddSingleton<IMysettingsService, MysettingsService >(i => new MysettingsService ());
按照以下步骤:
定义MySettings
public class MySettings
{
public string Name { get; set; }
public string Description { get; set; }
}
定义MySettingsService
public class MySettingsService : IMySettingsService
{
private readonly MySettings mySettings;
public MySettingsService (IOptions<MySettings> _mySettings)
{
mySettings = _mySettings.Value;
}
public string GetName()
{
return mySettings.Name;
}
}
在启动中
services.Configure<MySettings>(this.Configuration.GetSection("MySettings"));
services.AddSingleton<IMySettingsService, MySettingsService >();
已编辑——我包括了供您遵循的实现
我已经创建了一个示例应用程序,它适用于我;请按照以下步骤操作:
一些细节。我的申请名称是:SettingsApp
mySettings.json
- 内容{
"MySettings": {
"Name": "Some Name from config",
"Description": "Some Description from config"
}
}
Startup
中配置它public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("mySettings.json", true, reloadOnChange: true)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
if (env.IsDevelopment())
{
// This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
builder.AddApplicationInsightsSettings(developerMode: true);
}
Configuration = builder.Build();
}
查看行:
.AddJsonFile("mySettings.json", true, reloadOnChange: true)
MySettings
对象来保存设置namespace SettingsApp.Initialisations
{
public class MySettings
{
public string Name { get; set; }
public string Description { get; set; }
}
}
注意:我使用命名空间 SettingsApp.Initialisations
来保存这个文件。您可以根据您的应用程序结构选择任何一个。
IMySettingsService
namespace SettingsApp.Services
{
public interface IMySettingsService
{
string GetName();
}
}
注意:我使用命名空间 SettingsApp.Services
为此。
IMySettingsService
using SettingsApp.Initialisations;
using Microsoft.Extensions.Options;
namespace SettingsApp.Services
{
public class MySettingsService : IMySettingsService
{
private readonly MySettings mySettings;
public MySettingsService(IOptions<MySettings> _mySettings)
{
mySettings = _mySettings.Value;
}
public string GetName()
{
return mySettings.Name;
}
}
}
Startup.ConfigureServices
中的实现方法// This method gets called by the run time. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Options
services.AddOptions();
services.Configure<MySettings>(this.Configuration.GetSection("MySettings"));
services.AddSingleton<IMySettingsService, MySettingsService>();
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc();
}
注意包括所需的使用。
检查下面的代码,了解这是如何完成的:
// Options
services.AddOptions();
services.Configure<MySettings>(this.Configuration.GetSection("MySettings"));
services.AddSingleton<IMySettingsService, MySettingsService>();
HomeController
进行测试。)public class HomeController : Controller
{
private IMySettingsService mySettingsService;
public HomeController(IMySettingsService settingsService)
{
mySettingsService = settingsService;
}
public IActionResult Index()
{
// Get the settings
var name = mySettingsService.GetName();
return View();
}
...
关于c# - 将 IOptions 传递到 .Net 核心中间件类以进行 json 配置检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39490949/
我可以将 IConfiguration 配置注入(inject)构造函数,然后通过 config["settignName"] 从 json 文件访问应用程序设置; 服务类中的示例代码: public
我已经实现了 IndexBuilderSettings,它是某些服务的模型,例如当我为其创建一个模型时,如下所示 services.AddSingleton() .Configure((set
我已经实现了 IndexBuilderSettings,它是某些服务的模型,例如当我为其创建一个模型时,如下所示 services.AddSingleton() .Configure((set
是否可以将 JSON 文件 (appsettings.json) 中的属性绑定(bind)到使用不同属性名称的类? { "WebTarget": { "WebURL": "http:/
在 ASP.NET Core 2.1 中,我有一个使用 IOptions 接口(interface)发送电子邮件的类,如下所示: public class Email { private re
在我的 .NET Core 项目中,我在 Configure 方法中有以下设置: public void ConfigureServices(IServiceCollection services)
我正在尝试在我创建的服务中注入(inject) IOptions,但它始终为 null: public class Startup { private IConfiguration confi
在我看来,让域服务需要 IOptions 的实例是个坏主意。传递它的配置。现在我必须将额外的(不必要的?)依赖项添加到库中。我见过很多注入(inject) IOptions 的例子遍布网络,但我看不到
我正在尝试创建一个使用 IOptions 的通用方法作为参数,但代码似乎无效。 Visual Studio 显示以下消息: TConfig must be a non-abstract type wi
我有一个 worker service ind dotnet core 3.1: 程序.cs: public class Program { public static voi
我正在使用我在实际应用程序中使用的相同 Autofac 模块注册编写集成测试。我使用这样的基类将其连接起来: public abstract class ContainerFixture where
我不明白!我发誓我严格按照文档 ( Options pattern in ASP.NET Core ) 进行操作,但是一旦我开始使用我的服务,选项值为 null。 这是 appsettings.jso
选项模式允许我创建包含配置值的选项对象,如下所述:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/op
我正在尝试在一个带有 NancyFX 的项目上实现选项模式(如推荐的 here )/TinyIOC但它不起作用。 我正在 Startup.cs.ConfigureServices 上注册选项方法,但是
我有一个从 ASP.Net Core(目标 4.5)和 4.5 网络应用程序引用的类库,我想共享应用程序设置。我在 4.5 端使用 Unity for DI,在 Core 端使用 Core Boots
我正在使用 IOptions<>根据 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options
我想让类保持静态。是否有任何解决方法来注入(inject) IOptions 不修改访问修饰符? public static class Encrypter { private static
我正在尝试为一个类(在 .net Core 项目中)编写一个 xunit 测试,它看起来像: public Class FoodStore:IFoodStore { FoodList food
我刚开始使用 net core 2.1 构建 API。 我在 appsettings.json 中添加了我的连接字符串,我想访问它。 appsettings.json "MySettings":
我试图在使用内置 DI 机制的同时获得与 ASP.NET Core 2.1 应用程序一致的 .NET Framework 类库。现在,我创建了一个配置类并将适当的部分添加到 appsettings.j
我是一名优秀的程序员,十分优秀!