У меня есть класс опций:
Код: Выделить всё
public class MyOptions
{
public string Name { get; set; }
}
Код: Выделить всё
public interface IServiceWithOptions { /*...*/ }
public class ServiceWithOptions : IServiceWithOptions
{
public ServiceWithOptions(IOptions options)
{
// ...
}
}
Код: Выделить всё
public interface IFirstService { /*...*/ }
public class FirstService : IFirstService
{
public FirstService(IServiceWithOptions svcWithOpts)
{
// ...
}
}
public interface ISecondService { /*...*/ }
public class SecondService : ISecondService
{
public SecondService(
IServiceWithOptions svcWithOptsPrimary,
IServiceWithOptions svcWithOptsSecondary)
{
// ...
}
}
Код: Выделить всё
{
"MyOptions": {
"First": {
"Name": "The first one"
},
"SecondPrimary": {
"Name": "The second one, primary instance"
},
"SecondSecondary": {
"Name": "The second one, secondary instance"
}
}
}
Но как мне зарегистрировать службы для получения Servicewithoptions , используя правильный именованный экземпляр myoptions в каждом случае? Singletons, включая каждый «вариант» Servicewithoptions , то есть это было бы просто отлично с одним синглтоном этой службы для каждого Myoptions .
Регистрация услуг (не мой код) выглядит примерно так («сглаженная» для простоты):
var services = new ServiceCollection();
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile($"appsettings.json", optional: false, reloadOnChange: false)
.AddUserSecrets(typeof(Initializer).Assembly);
var configuration = builder.Build();
services.AddOptions();
services.AddOptions("First").Bind(configuration.GetSection("MyOptions:First"));
services.AddOptions("SecondPrimary").Bind(configuration.GetSection("MyOptions:SecondPrimary"));
services.AddOptions("SecondSecondary").Bind(configuration.GetSection("MyOptions:SecondSecondary"));
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
Я не (пока) не думал о том, чтобы сделать что-то не-синглтон.
Подробнее здесь: https://stackoverflow.com/questions/797 ... sumer-serv
Мобильная версия