cod*_*ter 9 c# configuration console-application .net-core
我第一次尝试使用新的ConfigurationBuilder和Options模式进入.Net Core库.
很好的例子地块的位置:https://docs.asp.net/en/latest/fundamentals/configuration.html 和示例的一个良好的副本这里
第1项.它说这可以用于非MVC应用程序,但没有关于如何在没有MVC的情况下使用它的示例 - 特别是如果您使用自定义的强类型类. 我想看一个使用控制台应用程序显示DependencyInjection,Configuration和Logging设置的示例.
第2项.它表示您可以回写,但没有关于如何将任何更改保留回文件存储的示例或文档. 我想看一个如何使用强类型类继续更改回配置的示例.在Json或XML中?
第3项.所有示例都需要手动轰炸的初始文件 - 希望看到一个示例,其中初始json/xml文件是从强类型类创建的(当应用程序有许多参数时会派上用场).
如果我可以在这上花足够的时间(而不是重新发布文档中已有的例子),我会这样做的! 如果您知道有助于我的帖子/文档,我将不胜感激.
Ger*_*oli 20
如何为依赖注入,日志记录和配置配置.NET Core 1.0.0控制台应用程序?
在RC2之后,很多写的内容都被弃用了.(见问题).Fortunatelly有一些更新的帖子,有很多信息:
Essential .NET - 使用.NET Core进行依赖注入
Essential .NET - 使用.NET Core进行日志记录
我提出了以下解决方案.我打赌有些东西可以改进,请留下评论,以便我可以改进这个答案.
在我static void Main,我
ConfigureServicesApplication使用DI 实例化我的课程在我的Application课上:
这是代码.
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Configuration;
using System.IO;
public class Program
{
static void Main(string[] args)
{
IServiceCollection serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
// Application application = new Application(serviceCollection);
IServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
var app = serviceProvider.GetService<Application>();
// For async
Task.Run(() => app.Run()).Wait(); // Exceptions thrown here will be lost! Catch them all at Run()
// Otherwise use sync as in: app.Run();
}
private static void ConfigureServices(IServiceCollection services)
{
ILoggerFactory loggerFactory = new LoggerFactory()
.AddConsole()
.AddDebug();
services.AddSingleton(loggerFactory); // Add first my already configured instance
services.AddLogging(); // Allow ILogger<T>
IConfigurationRoot configuration = GetConfiguration();
services.AddSingleton<IConfigurationRoot>(configuration);
// Support typed Options
services.AddOptions();
services.Configure<MyOptions>(configuration.GetSection("MyOptions"));
services.AddTransient<Application>();
}
private static IConfigurationRoot GetConfiguration()
{
return new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile($"appsettings.json", optional: true)
.Build();
}
}
public class MyOptions
{
public string Name { get; set; }
}
public class Application
{
ILogger _logger;
MyOptions _settings;
public Application(ILogger<Application> logger, IOptions<MyOptions> settings)
{
_logger = logger;
_settings = settings.Value;
}
public async Task Run()
{
try
{
_logger.LogInformation($"This is a console application for {_settings.Name}");
}
catch (Exception ex)
{
_logger.LogError(ex.ToString());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
AppSettings.json文件:
{
"MyOptions": {
"Name" : "John"
}
}
Run Code Online (Sandbox Code Playgroud)
和project.json文件:
"dependencies": {
"Microsoft.Extensions.Configuration": "1.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.DependencyInjection": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Options": "1.0.0",
"Microsoft.Extensions.PlatformAbstractions": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
Run Code Online (Sandbox Code Playgroud)
关于你的问题#2:我已阅读该文档,除非我遗漏了某些内容,否则它不会说您可以编写配置.除非您使用Newtonsoft.JSON手动编辑JSON文件,否则我不确定您是否可以这样做.
如果将名称/值对写入"配置",则不会保留该值.这意味着当再次读取源时,写入的值将丢失.
对于您的问题#3,我已经包含了一个默认的AppSettings.json文件.您的配置应该有一个Section,其设置与您的设置类的公共属性的名称相匹配.
| 归档时间: |
|
| 查看次数: |
7245 次 |
| 最近记录: |