Exemple #1
0
        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);
        }
Exemple #2
0
 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));
 }