feat(DI): support scoped services with interfaces

This commit is contained in:
goat 2023-08-02 23:03:58 +02:00
parent f69fb6cc03
commit ee181c9a89
No known key found for this signature in database
GPG key ID: 49E2AA8C6A76498B
2 changed files with 64 additions and 45 deletions

View file

@ -132,11 +132,20 @@ internal static class ServiceManager
var dependencyServicesMap = new Dictionary<Type, List<Type>>();
var getAsyncTaskMap = new Dictionary<Type, Task>();
var serviceContainer = Service<ServiceContainer>.Get();
foreach (var serviceType in Assembly.GetExecutingAssembly().GetTypes())
{
var serviceKind = serviceType.GetServiceKind();
if (serviceKind is ServiceKind.None or ServiceKind.ScopedService)
if (serviceKind is ServiceKind.None)
continue;
// Scoped service do not go through Service<T>, so we must let ServiceContainer know what their interfaces map to
if (serviceKind is ServiceKind.ScopedService)
{
serviceContainer.RegisterInterfaces(serviceType);
continue;
}
Debug.Assert(
!serviceKind.HasFlag(ServiceKind.ManualService) && !serviceKind.HasFlag(ServiceKind.ScopedService),