ИспользованиеimplementFactory со связанными сервисами во внедрении зависимостейC#

Место общения программистов C#
Ответить
Anonymous
 ИспользованиеimplementFactory со связанными сервисами во внедрении зависимостей

Сообщение Anonymous »

Я прочитал документацию по внедрению зависимостей, но не могу найти правильный подход к использованиюimplementationFactory, когда делегат должен разрешить связанные службы из DI-контейнера для настройки другой службы. (все службы реализуют IDisposable)

Код: Выделить всё

IHost hostBuilder = Host.CreateDefaultBuilder()
.ConfigureServices(
(context, services) =>
{
services.AddTransient();
services.AddScoped();
services.AddSingleton();
})
.ConfigureServices(
(context, services) =>
{
services.AddTransient(
sp =>
{
var transient = sp.GetRequiredService();
var scoped = sp.GetRequiredService();
var singleton = sp.GetRequiredService();

return new ServiceLifetimeReporter(transient, scoped, singleton);
});
})
.Build();
(Я понимаю, что этот пример будет работать и безimplementFactory)
Я не могу понять, как правильно написатьimplementationFactory
code> во втором методе ConfigurationServices.
  • Создает ли DI локальную область для реализации?
    Должен ли я вручную создавать локальную область видимости вimplementationFactory (с помощью CreateScope)?
  • Действует ли DI< /code> берет на себя ответственность за утилизацию (

    Код: Выделить всё

    Dispose()
    ) объекты до того, как они были созданы?
  • Каким будет правильный подход в этой (и подобной) ситуации?
Я экспериментировал с разными подходами:
  • Используйте пример выше (

    Код: Выделить всё

    Dispose()
    не был вызван)
  • Создать локальную область (

    Код: Выделить всё

    Dispose()
    вызывается для времен жизни Transient и Scoped)
  • Используйте using для вызова методов Dispose() (

    Код: Выделить всё

    Dispose()
    вызывается на протяжении всего времени существования)


Подробнее здесь: https://stackoverflow.com/questions/786 ... -injection
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»