Как говорит Стивен , вам нужно использовать отражение для AsClosedTypesOf
. Вот пример того, как это можно реализовать:
public static void RegisterGenerics(this IServiceCollection services, Assembly assembly, Type genericType)
{
AppDomain.CurrentDomain.GetAssemblies()
.FirstOrDefault(a => a.FullName == assembly.FullName)
.GetTypes()
.Where(x => x.IsAssignableFrom(genericType) && !x.IsAbstract && !x.IsInterface)
.ToList()
.ForEach(t =>
{
services.AddTransient(genericType, t);
});
}
И затем вы можете использовать его в своем классе запуска:
services.RegisterGenerics(Assembly.GetExecutingAssembly(), typeof(IEventHandler<>));