【发布时间】:2020-09-04 01:30:53
【问题描述】:
我有控制台应用程序,其中有控制台应用程序项目和类库
我创建了 appSettings.json 文件,用于存储所有数据。
在控制台应用程序中,我在 Program.cs 中创建此代码以使用 envVariables
class Program
{
public static IConfigurationRoot Configuration;
private static ServiceThread _serviceThread;
static async Task Main(string[] args)
{
MainAsync(args).Wait();
// Run with console or service
var asService = !(Debugger.IsAttached || args.Contains("--console"));
var builder = new HostBuilder()
.ConfigureServices((hostContext, services) => { services.AddHostedService<MonitoringService>(); });
builder.UseEnvironment(asService ? EnvironmentName.Production : EnvironmentName.Development);
if (asService)
{
await builder.RunAsServiceAsync();
}
else
{
_serviceThread = new ServiceThread();
_serviceThread.Start("Started");
await builder.RunConsoleAsync();
}
}
static async Task MainAsync(string[] args)
{
// Create service collection
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
// Create service provider
IServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
// Print connection string to demonstrate configuration object is populated
Console.WriteLine(Configuration.GetConnectionString("DataConnection"));
}
private static void ConfigureServices(IServiceCollection serviceCollection)
{
// Build configuration
Configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetParent(AppContext.BaseDirectory).FullName)
.AddJsonFile("appSettings.json", false)
.Build();
// Add access to generic IConfigurationRoot
serviceCollection.AddSingleton<IConfigurationRoot>(Configuration);
}
}
现在我想在类库中使用这些变量。
我试过这样
public class HelpersAppService
{
private readonly IConfigurationRoot _configuration;
public HelpersAppService(IConfigurationRoot configuration)
{
_configuration = configuration;
}
public ServerUrlsDto GetServerUrls()
{
var serverUrls = _configuration.GetSection("ServerUrls").Get<ServerUrlsDto>();
return serverUrls;
}
public AuthDto GetAuth()
{
var authData = _configuration.GetSection("Auth").Get<AuthDto>();
return authData;
}
}
但问题是,我在此方法中有空配置。我做错了什么?
【问题讨论】:
-
您正在创建一个全新的服务集合/提供者 outside 主机并将 IConfigurationRoot 添加到其中。然后,您的主机正在创建一个新主机(内部)。您没有展示您的类是如何被使用/注入的,而是尝试接受
IConfiguration,因为 Host Builder 确实将其添加到 its 集合 -
如何使用已创建的集合类库,或读取文件? @pinkfloydx33
-
你是如何实例化你的类库对象的?如果是通过 DI 则更改参数类型
-
什么意思,我有一个类库方法,我需要从 appSettings.json 文件中获取值。服务集合在控制台应用程序中实例化。我的问题是如何在类库方法中获取它们? @pinkfloydx33