public NeonManager() { ConfigureLogger(null); PrintHeader(); _logger = Log.Logger.ForContext <NeonManager>(); _logger.Debug($"Pre-loading assemblies"); var assemblies = AssemblyUtils.GetAppAssemblies(); _logger.Debug($"Loaded {assemblies.Count} assemblies"); AvailableServices = new List <Type>(); IsRunningInDocker = Environment.GetEnvironmentVariables()["DOTNET_RUNNING_IN_CONTAINER"] != null; _containerBuilder = new ContainerBuilder(); _containerBuilder.RegisterBuildCallback(container => { _logger.Debug($"Container is ready"); }); _configManager = new ConfigManager(_logger, this, _containerBuilder); _configManager.LoadConfig(); _secretKeyManager = new SecretKeyManager(Config.EngineConfig.SecretKey); _fileSystemManager = new FileSystemManager(_logger, Config, _secretKeyManager); _fileSystemManager.Start(); ConfigureLogger(_configManager); }
protected override void Configure() { AssemblySource.Instance.Clear(); AssemblySource.Instance.AddRange(AssemblyUtils.GetAppAssemblies()); var builder = new ContainerBuilder(); builder.RegisterType <WindowManager>() .AsImplementedInterfaces() .SingleInstance(); builder.RegisterType <EventAggregator>() .AsImplementedInterfaces() .SingleInstance(); builder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssembliesArray()) .Where(type => type.Name.EndsWith("ViewModel")) .Where(type => !(string.IsNullOrWhiteSpace(type.Namespace)) && type.Namespace.EndsWith("ViewModels")) .Where(type => type.GetInterface(typeof(INotifyPropertyChanged).Name) != null) .AsSelf() .InstancePerDependency(); // register views builder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssembliesArray()) .Where(type => type.Name.EndsWith("View")) .Where(type => !(string.IsNullOrWhiteSpace(type.Namespace)) && type.Namespace.EndsWith("Views")) .AsSelf() .InstancePerDependency(); _container = builder.Build(); }
private void RegisterMediator() { ContainerBuilder.RegisterAssemblyTypes(typeof(IMediator).GetTypeInfo().Assembly).AsImplementedInterfaces(); AssemblyUtils.GetAppAssemblies().ForEach(a => { ContainerBuilder .RegisterAssemblyTypes(a) .AsClosedTypesOf(typeof(IRequestHandler <,>)) .AsImplementedInterfaces().SingleInstance();; ContainerBuilder .RegisterAssemblyTypes(a) .AsClosedTypesOf(typeof(INotificationHandler <>)) .AsImplementedInterfaces().SingleInstance(); }); ContainerBuilder.RegisterGeneric(typeof(RequestPostProcessorBehavior <,>)).As(typeof(IPipelineBehavior <,>)); ContainerBuilder.RegisterGeneric(typeof(RequestPreProcessorBehavior <,>)).As(typeof(IPipelineBehavior <,>)); ContainerBuilder.Register <ServiceFactory>(ctx => { var c = ctx.Resolve <IComponentContext>(); return(t => c.Resolve(t)); }); }
protected override void Load(ContainerBuilder builder) { AssemblyUtils.GetAppAssemblies().ForEach(a => { builder .RegisterAssemblyTypes(a) .AsClosedTypesOf(typeof(IBaseApiController <,>)) .AsImplementedInterfaces().InstancePerDependency(); }); base.Load(builder); }
public IServiceProvider ConfigureServices(IServiceCollection services) { _config = Program.NeonManager.Config; services.AddControllers(); services.AddOpenApiDocument(); services.AddWebSockets(options => { options.KeepAliveInterval = TimeSpan.FromSeconds(120); options.ReceiveBufferSize = 4 * 1024; }); services.AddCors(c => { c.AddPolicy("AllowOrigin", options => { options .AllowAnyHeader() .AllowAnyOrigin(); }); }); services.AddMetrics(); services.AddSingleton(typeof(ILogger <>), typeof(LoggerEx <>)); services.AddMediatR(AssemblyUtils.GetAppAssemblies().ToArray()); services.AddHttpClient(); services.AddWebSocketManager(); services.AddMvc().AddNewtonsoftJson(jo => { jo.SerializerSettings.ContractResolver = new DefaultContractResolver() { NamingStrategy = new SnakeCaseNamingStrategy() }; }); Program.NeonManager.ContainerBuilder.Populate(services); Program.NeonManager.Init(); ApplicationContainer = Program.NeonManager.Build(); return(new AutofacServiceProvider(ApplicationContainer)); }
public ContainerBuilder InitContainer() { var assemblies = AssemblyUtils.GetAppAssemblies(); PrintHeader(); EnhancedStackTrace.Current(); InitPolly(); ServicesInfo = new ObservableCollection <ServiceInfo>(); ContainerBuilder = new ContainerBuilder(); ContainerBuilder.RegisterModule(new LogRequestModule()); ContainerBuilder.RegisterInstance(_neonConfig); ContainerBuilder.RegisterInstance <IServicesManager>(this); InitManagers(); ContainerBuilder.RegisterAssemblyTypes(typeof(IMediator).GetTypeInfo().Assembly).AsImplementedInterfaces(); AssemblyUtils.GetAppAssemblies().ForEach(a => { ContainerBuilder .RegisterAssemblyTypes(a) .AsClosedTypesOf(typeof(IRequestHandler <,>)) .AsImplementedInterfaces().SingleInstance();; ContainerBuilder .RegisterAssemblyTypes(a) .AsClosedTypesOf(typeof(INotificationHandler <>)) .AsImplementedInterfaces().SingleInstance(); }); // It appears Autofac returns the last registered types first ContainerBuilder.RegisterGeneric(typeof(RequestPostProcessorBehavior <,>)).As(typeof(IPipelineBehavior <,>)); ContainerBuilder.RegisterGeneric(typeof(RequestPreProcessorBehavior <,>)).As(typeof(IPipelineBehavior <,>)); ContainerBuilder.Register <ServiceFactory>(ctx => { var c = ctx.Resolve <IComponentContext>(); return(t => c.Resolve(t)); }); var singletonServices = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(SingletonAttribute)); var transientServices = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(TransientAttribute)); var scopedServices = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(ScopedAttribute)); var dataAccess = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(DataAccessAttribute)); var luaObjects = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(ScriptObjectAttribute)); var jobObjects = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(SchedulerJobTaskAttribute)); var dbSeedsObject = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(DatabaseSeedAttribute)); var componentsObject = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(ComponentAttribute)); var noSqlConnectors = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(NoSqlConnectorAttribute)); var scriptEngines = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(ScriptEngineAttribute)); _availableServices = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(ServiceAttribute)); _logger.LogDebug($"Services {_availableServices.Count}"); _logger.LogDebug($"Singleton services {singletonServices.Count}"); _logger.LogDebug($"Transient services {transientServices.Count}"); _logger.LogDebug($"Scoped services {scopedServices.Count}"); _logger.LogDebug($"DataAccesses {dataAccess.Count}"); luaObjects.ForEach(l => { ContainerBuilder.RegisterType(l).AsSelf().SingleInstance(); }); singletonServices.ForEach(t => RegisterService(LifeScopeTypeEnum.SINGLETON, t)); componentsObject.ForEach(t => RegisterService(LifeScopeTypeEnum.SINGLETON, t)); scriptEngines.ForEach(s => RegisterService(LifeScopeTypeEnum.SINGLETON, s)); ContainerBuilder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssemblies().ToArray()) .Where(t => t == typeof(IDatabaseSeed)) .AsImplementedInterfaces() .SingleInstance(); ContainerBuilder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()) .Where(t => t == typeof(IDataAccess <>)) .AsImplementedInterfaces() .SingleInstance(); ContainerBuilder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssemblies().ToArray()) .AsClosedTypesOf(typeof(IDataAccess <>)).AsImplementedInterfaces(); ContainerBuilder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssemblies().ToArray()) .AsClosedTypesOf(typeof(AbstractDataAccess <>)).AsImplementedInterfaces(); ContainerBuilder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssemblies().ToArray()) .AsClosedTypesOf(typeof(IDtoMapper <,>)).AsImplementedInterfaces(); ContainerBuilder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssemblies().ToArray()) .AsClosedTypesOf(typeof(AbstractDtoMapper <,>)).AsImplementedInterfaces(); dataAccess.ForEach(d => { ContainerBuilder.RegisterType(d).As(AssemblyUtils.GetInterfaceOfType(d)).InstancePerLifetimeScope(); }); noSqlConnectors.ForEach(t => { ContainerBuilder.RegisterType(t).InstancePerDependency(); }); transientServices.ForEach(t => RegisterService(LifeScopeTypeEnum.TRANSIENT, t)); dbSeedsObject.ForEach(t => { ContainerBuilder.RegisterType(t).AsSelf().InstancePerLifetimeScope(); }); scopedServices.ForEach(t => RegisterService(LifeScopeTypeEnum.SCOPED, t)); jobObjects.ForEach(t => RegisterService(LifeScopeTypeEnum.SCOPED, t)); ContainerBuilder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssemblies().ToArray()) .Where(t => t.Name.ToLower().EndsWith("service")) .AsImplementedInterfaces().SingleInstance(); //ContainerBuilder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssemblies().ToArray()) // .Where(t => t.Name.ToLower().EndsWith("component")) // .AsImplementedInterfaces().SingleInstance(); return(ContainerBuilder); }
// This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) { var builder = _servicesManager.InitContainer(); services.AddSingleton(typeof(ILogger <>), typeof(LoggerEx <>)); services.AddAutoMapper(AssemblyUtils.GetAppAssemblies()); services.AddMvc() .SetCompatibilityVersion(CompatibilityVersion.Version_2_2); // if (_neonConfig.EnableMetrics) // services.AddMetrics(); services.AddLogging(); services.AddHttpClient(); var key = Encoding.ASCII.GetBytes(Configuration.Get <NeonConfig>().JwtToken); services.AddAuthentication(x => { x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(x => { x.RequireHttpsMetadata = false; x.SaveToken = true; x.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = false, ValidateAudience = false }; }); if (_neonConfig.EnableSwagger) { services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "Leon Home control", Version = "v1.0" }); }); } services.AddDbContextPool <NeonDbContext>(options => { //var config = Configuration.Get<NeonConfig>(); var dbFullPath = $"Data Source={_neonConfig.FileSystem.RootDirectory}{_neonConfig.EventsDatabase.DatabaseDirectory}{Path.DirectorySeparatorChar}{_neonConfig.Database.ConnectionString}"; options.UseSqlite(dbFullPath); }); services.AddTransient <DbContext, NeonDbContext>(); services.AddResponseCompression(); builder.Populate(services); _container = _servicesManager.Build(); return(new AutofacServiceProvider(_container)); }