Я использую MultiCredentialProvider
, который реализует интерфейс Microsoft.Bot.Connector.Authentication.ICredentialProvider
.Он работает со статическими значениями , но как только я пытаюсь передать хранилище, которое использует DbContext
для получения учетных данных моих ботов, происходит сбой со следующим сообщением.
System.InvalidOperationException: An attempt was made to use the context while it is being configured. A DbContext instance cannot be used inside OnConfiguring since it is still being configured at this point. This can happen if a second operation is started on this context before a previous operation completed. Any instance members are not guaranteed to be thread safe.
Это вызвано тем, что хранилище должно быть ограничено, а не просто передано объекту для использования на более поздней стадии.Хранилище разрешается методом ConfigureServices
класса Startup
.
var sp = services.BuildServiceProvider();
var repository = sp.GetService<SomeRepository>();
services.AddBot<SomeBot>(options => {
options.CredentialProvider = new MultiCredentialProvider(configuration, repository);
})
Вопрос в том, как разрешить службу по требованию, чтобы избежать этой ошибки?Можно ли разрешить весь CredentialProvider, чтобы я мог использовать инъекцию конструктора?Что-нибудь еще, чего мне здесь не хватает?
-
Обновление: В качестве временного решения я сначала получаю список учетных данных из базы данных, затем создаю объект и передаю учетные данные в MultiCredentialProvider
конструктор.Единственная проблема заключается в том, что все назначается при запуске и не может быть изменено позднее.Все еще ищем лучшие решения.