Код: Выделить всё
public class ServiceA: IServiceA
{}
public class ServiceB: IServiceB
{}
public class ServiceC: IServiceC
{}
Код: Выделить всё
public Task ResetAsync(CancellationToken cancellationToken = default)
{
// Reset something
}
Код: Выделить всё
public interface IResettable
{
Task ResetAsync(CancellationToken cancellationToken = default);
}
Код: Выделить всё
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
Код: Выделить всё
IServiceA : IResettable
IServiceB : IResettable
IServiceC : IResettable
Код: Выделить всё
ServiceA : IServiceA, IResettable
ServiceB : IServiceB, IResettable
ServiceC : IServiceC, IResettable
Код: Выделить всё
public class ResetService(
IEnumerable services) : IResetService
{
private readonly IEnumerable _services = services;
public async Task DoWorkAsync(CancellationToken cancellationToken = default)
{
foreach (var service in _services)
{
await service.ResetAsync(cancellationToken);
}
}
}
Код: Выделить всё
services.AddTransient();
services.AddTransient();
services.AddTransient();
services.TryAddSingleton();
Итак, мои вопросы:
- В чем глобальная разница между этими регистрациями:
Код: Выделить всё
services.AddSingleton(); services.AddSingleton(); - Какой тип наследования мне следует использовать и почему
Код: Выделить всё
ServiceA : IServiceA, IResettable // or ServiceA : IServiceA IServiceA : IResettable - И ГЛАВНЫЙ ВОПРОС: Как я могу зарегистрировать один и тот же экземпляр ServiceA как IServiceA и как IResettable (с использованием .Net Core DI) для использования IServiceA в других службах и использования IEnumerable в ResetService для вызова ResetAsync для всех IResettable услуги?
Подробнее здесь: https://stackoverflow.com/questions/792 ... interfaces
Мобильная версия