public static IServiceCollection AddModularStartup <THost>(this IServiceCollection services, IConfiguration configuration) where THost : AppHostBase { if (TopLevelAppModularStartup.Instance != null) { throw new NotSupportedException($"{nameof(AddModularStartup)} has already been called"); } var ci = typeof(THost).GetConstructor(Type.EmptyTypes); if (ci == null) { throw new NotSupportedException($"{typeof(THost).Name} requires a parameterless constructor"); } var host = (THost)ci.Invoke(TypeConstants.EmptyObjectArray); var dlls = new List <Assembly>(host.ServiceAssemblies) { typeof(THost).Assembly }; var types = dlls.Distinct().SelectMany(x => x.GetTypes()) .Where(x => x != typeof(TopLevelAppModularStartup)).ToList(); var startup = TopLevelAppModularStartup.Create(host, configuration, () => types); startup.ConfigureServices(services); return(services); }
public static ModularStartup Create <THost>(THost instance, IConfiguration configuration, Func <IEnumerable <Type> > typesResolver) where THost : AppHostBase { instance.Configuration = configuration; return(Instance = new TopLevelAppModularStartup(typeof(THost), instance, configuration, typesResolver)); }