namespace Toolkit.Foundation { public class ServiceFactory : IServiceFactory { private readonly Func factory; private readonly Func creator; public ServiceFactory(Func factory, Func creator) { this.factory = factory; this.creator = creator; } public object? Create(Type type, params object?[] parameters) { dynamic? lookup = factory(typeof(IServiceCreator<>).MakeGenericType(type)); return lookup is not null ? lookup.Create(creator, parameters) : creator(type, parameters); } public T? Create(Type type, params object?[] parameters) { dynamic? lookup = factory(typeof(IServiceCreator<>).MakeGenericType(type)); return lookup is not null ? (T)lookup.Create(creator, parameters) : (T)creator(type, parameters); } } }