配置.NET核心
所以,我一直在关注this guide,当然所有的例子都是要么在访问中,他们被宣布同样的方法或控制器中的选项。对于我的生活,我无法弄清楚如何让它与任何随机课程一起工作。配置.NET核心
这里是我当前的代码:
appsettings.json
{
"Settings": {
"GameServerVersion": 14
},
....
}
Settings.cs
public class Settings
{
public int GameServerVersion { get; set; }
}
Startup.cs
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
this.Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddCors();
services.AddOptions();
services.Configure<Settings>(this.Configuration.GetSection("Settings"));
JobManager.StartAsync();
}
JobManager.cs
public class JobManager
{
private static IScheduler scheduler;
public static async void StartAsync()
{
// Quartz.NET jobs
// Setup scheduler, register jobs, etc.
// Trying to retrieve ```Settings.GameServerVersion``` to pass it to one of the jobs
}
}
现在指南建议,我应该使用以下(适用于我的例子):
private readonly Settings settings;
public JobManager(IOptions<Settings> settingsAccessor)
{
settings = settingsAccessor.Value;
}
而这正是我开始迷失。我知道我可以只使用以下内容,但我不知道如何将相关参数传递给构造函数。
JobManager jm = new JobManager(); // cannot use an empty constructor obviously
jm.StartAsync(); // no longer a static method
任何帮助或指导将不胜感激,因为我还是很新的C#。
这是更好地(在你的情况类似静态RunAsync
)不执行任何静态初始化当您使用依赖注入容器。相反,注册JobManager
本身(最好是通过接口)的容器(假设你通过IOptions
虽然构造函数在你的例子):
services.AddSingleton<JobManager>();
然后,后来,例如在Configure
方法在你Startup
类,解决它,并开始:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {
var jm = app.ApplicationServices.GetService<JobManager>();
jm.StartAsync();
// etc
}
如果您需要任何控制器使用JobManager
- 只是通过它,虽然构造 - 它会自动解决。
先生,你是一位真正的英雄,非常感谢你。 GetService部分是缺失的链接。是否有可能使它与'IOptionsSnapshot'一起使用? –
Nvm,这是Quartz.NET特定的东西,都很好。 –
@ChrisSatchell IOptionsSnapshot也不例外。您在注册依赖注入容器的一些东西(或IOptions或IOptionsSnapshot的情况下 - 框架这是否),你可以传递作为参数在同一个容器中注册任何其他的东西构造。 – Evk
你应该在注册依赖注入容器的JobManager('services.AddSingleton'或类似),并从那里,而不是手动构建解决。 – Evk
你可能会进入更多细节?我想我明白你的意思,但我不确定实施 –