Я работаю над проектом ASP.NET Core 2.1, в котором мне нужно зарегистрироваться, а затем использовать одноэтапную службу внутри Startup.ConfigureServices.
У меня есть следующий код:
public void ConfigureServices(IServiceCollection services)
{
//....
//....
services.AddSingleton<IMyService,MyService>();
var serviceProvider = services.BuildServiceProvider();
var myService = serviceProvider.GetService<IMyService>();
services.AddDbContext<MyDbContext>(options => options.UseMySql(myService.DBConnectionString));
}
Приведенный выше код отлично работает, чтобы я мог использовать «MyService» внутри ConfigureServices. Однако позже в моем приложении, когда я пытаюсь использовать MyService, конструктор MyService вызывается снова. Почему он не использует экземпляр, который уже был создан, так как я зарегистрировал класс, используя AddSingleton
?
РЕДАКТИРОВАТЬ: Я решил отредактировать, чтобы добавить свою конечную цель, чтобы увидеть, если, возможно, есть другой способ сделать это. Мой синглтон сервис предоставляет доступ к нескольким настройкам, которые могут прийти из 2 разных мест. Одним из таких параметров является строка подключения к БД. Мне нужна эта строка подключения в ConfigureServices, чтобы она была у меня при вызове services.AddDbContext
. Я также хочу выполнить вход в службу, которая получает параметры конфигурации, а это значит, что мне также нужно получить ILoggerFactory.