Поскольку вы упомянули, что хотите, чтобы ваш Dictionary<bool, List<int>>
объект был открыт для общего доступа, я предполагаю, что вы не намеревались внедрить MyServiceDataAccess
в качестве временного объекта.Либо создайте словарь для объекта static
, либо вставьте его как Singleton
ниже.
private static void ConfigureServices(IServiceCollection serviceCollection)
{
serviceCollection.AddTransient<IMyServiceDataAccess, MyServiceDataAccess>();
serviceCollection.AddSingleton<MyService>();
}
То, нужно ли вам это делать, зависит от уровня данных, например, EntityFrameworkCore рекомендует вводить DbContexts с временем жизни Scoped .
. В этот момент вы можете обновить свой метод GetData
, чтобы повторно инициализировать Dictionary
в его вызове метода .... но у вас есть несколько потоковкоторый может вызывать этот метод одновременно, и если ваш Dictionary
равен static
или вы используете Singleton
, у вас возникнут проблемы с изменением Dictionary
и попыткой его использоватьчерез разные темы.Вместо этого вы можете использовать ConcurrentDictionary , который является поточно-ориентированным.Однако зачем вам нужно делиться этим Dictionary
между потоками, если вы все равно просто инициализируете его при каждом вызове?Единственные ответы, которые дадут вам запрошенное решение, будут иметь ненадежный Dictionary
, или вам придется отстранить ваш GetData
вызов и отменить любую точку в совместном использовании Dictionary
для начала.
Я сделал некоторые предположения с этим ответом, потому что вы не четко описали проблему, с которой вы столкнулись, а только детали решения, которое вы ищете, которое легко реализовать, но логически имеет много проблем.Цель этого ответа состояла в том, чтобы осветить эти проблемы и, надеюсь, привести вас в лучшем направлении.