Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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();
        }
Esempio n. 3
0
        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);
 }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        // 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));
        }