示例#1
0
文件: DbFactory.cs 项目: zyptfy/moz
        public static bool CheckInstalled(MozOptions mozOptions)
        {
            if (_isInstalled != null && _isInstalled.Value)
            {
                return(true);
            }
            try
            {
                var dbOption = mozOptions.Db.FirstOrDefault(it => it.Name.Equals("default", StringComparison.OrdinalIgnoreCase));

                if (dbOption == null)
                {
                    return(false);
                }

                if (dbOption.MasterConnectionString.IsNullOrEmpty())
                {
                    return(false);
                }

                using (var db = new SqlSugarClient(new ConnectionConfig
                {
                    DbType = dbOption.Type,
                    ConnectionString = dbOption.MasterConnectionString
                }))
                {
                    _isInstalled = db.DbMaintenance.IsAnyTable("tab_member", false);
                    return(_isInstalled.Value);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                return(false);
            }
        }
示例#2
0
 public ScheduleTaskController(IScheduleTaskService scheduleTaskService, IOptions <MozOptions> mozOptions)
 {
     _scheduleTaskService = scheduleTaskService;
     _mozOptions          = mozOptions.Value;
 }
示例#3
0
 public void Configure(IApplicationBuilder application, IConfiguration configuration, IWebHostEnvironment webHostEnvironment,
                       MozOptions mozOptions)
 {
 }
示例#4
0
 public void ConfigureServices(IServiceCollection services, IConfiguration configuration,
                               IWebHostEnvironment webHostEnvironment, MozOptions mozOptions)
 {
 }
示例#5
0
        private static IServiceProvider ConfigureServices(IServiceCollection services, IConfiguration configuration,
                                                          IWebHostEnvironment webHostEnvironment, MozOptions mozOptions)
        {
            ServicePointManager.SecurityProtocol =
                SecurityProtocolType.Tls12 |
                SecurityProtocolType.Tls11 |
                SecurityProtocolType.Tls;

            services.AddAuthorization(options =>
            {
                options.AddPolicy("admin_authorize",
                                  policy => { policy.Requirements.Add(new DefaultAuthorizationRequirement("admin")); });
                options.AddPolicy("member_authorize",
                                  policy => { policy.Requirements.Add(new DefaultAuthorizationRequirement("member")); });
            });

            services.AddAuthentication()
            .AddJwtBearer(MozAuthAttribute.MozAuthorizeSchemes, cfg =>
            {
                cfg.RequireHttpsMetadata = false;
                cfg.SaveToken            = true;

                var parameters = EngineContext.Current.Resolve <IJwtService>().GetTokenValidationParameters();
                cfg.TokenValidationParameters = parameters;

                cfg.Events = new JwtBearerEvents
                {
                    OnAuthenticationFailed = o => throw new AlertException("auth failure")
                };
            });

            //Session会话
            services.AddSession(options =>
            {
                options.Cookie.Name     = "__moz__session";
                options.Cookie.HttpOnly = true;
                options.IdleTimeout     = TimeSpan.FromMinutes(30);
            });

            //添加MVC
            services.AddMvc(options => { })
            .AddRazorRuntimeCompilation()
            .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = null; })
            .AddFluentValidation(options =>
            {
                options.ImplicitlyValidateChildProperties = true;
                options.ValidatorFactoryType = typeof(MozValidatorFactory);
                options.RunDefaultMvcValidationAfterFluentValidationExecutes = false;
            });



            services.AddApiVersioning(o =>
            {
                o.ReportApiVersions = true;
                o.AssumeDefaultVersionWhenUnspecified = true;
                o.DefaultApiVersion = new ApiVersion(1, 0);
            });

            #region 依赖注入

            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            services.AddSingleton <IActionContextAccessor, ActionContextAccessor>();
            services.AddTransient <IWorkContext, WebWorkContext>();
            services.AddSingleton <IFileManager, FileManager>();
            services.AddTransient <HttpContextHelper>();
            services.AddSingleton <IEventPublisher, DefaultEventPublisher>();
            services.AddSingleton <ITaskScheduleManager, TaskScheduleManager>();
            services.AddSingleton <IAuthorizationHandler, DefaultAuthorizationHandler>();

            //注入服务类 查找所有Service结尾的类进行注册
            var allServiceInterfaces = TypeFinder.GetAllTypes()
                                       .Where(t => (t?.IsInterface ?? false) && !t.IsDefined <IgnoreRegisterAttribute>(false) &&
                                              t.Name.EndsWith("Service"));
            foreach (var serviceInterface in allServiceInterfaces)
            {
                var service = TypeFinder.FindClassesOfType(serviceInterface.Type)?.FirstOrDefault();
                if (service != null)
                {
                    services.AddTransient(serviceInterface.Type, service.Type);
                }
            }


            //注册settings
            var settingTypes = TypeFinder.FindClassesOfType(typeof(ISettings)).ToList();
            foreach (var settingType in settingTypes)
            {
                services.TryAddTransient(settingType.Type, serviceProvider =>
                {
                    if (DbFactory.CheckInstalled(mozOptions))
                    {
                        var settingService = serviceProvider.GetService <ISettingService>();
                        return(settingService.LoadSetting(settingType.Type));
                    }

                    var instance = Activator.CreateInstance(settingType.Type);
                    return(instance);
                });
            }


            //注入 ExceptionHandler
            var exceptionHandlers = TypeFinder.FindClassesOfType(typeof(IExceptionHandler))
                                    .Where(it => it.Type != typeof(ErrorHandlingMiddleware))
                                    .ToList();
            foreach (var exceptionHandler in exceptionHandlers)
            {
                services.AddSingleton(exceptionHandler.Type);
            }

            //注入 StatusCodePageHandler
            var statusCodePageHandlers = TypeFinder.FindClassesOfType(typeof(IStatusCodePageHandler)).ToList();
            foreach (var statusCodePageHandler in statusCodePageHandlers)
            {
                services.AddSingleton(statusCodePageHandler.Type);
            }

            //事件发布
            var consumerTypes = TypeFinder.FindClassesOfType(typeof(ISubscriber <>)).ToList();
            foreach (var consumerType in consumerTypes)
            {
                var interfaceTypes = consumerType.Type.FindInterfaces((type, criteria) =>
                {
                    var isMatch = type.IsGenericType &&
                                  ((Type)criteria).IsAssignableFrom(type.GetGenericTypeDefinition());
                    return(isMatch);
                }, typeof(ISubscriber <>));
                var interfaceType = interfaceTypes.FirstOrDefault();
                if (interfaceType != null)
                {
                    services.AddTransient(interfaceType, consumerType.Type);
                }
            }

            #endregion

            //获取所有的 IMozStartup
            var startupConfigurations = TypeFinder.FindClassesOfType <IMozStartup>();

            //添加嵌入cshtml资源
            services.Configure <MvcRazorRuntimeCompilationOptions>(options =>
            {
                foreach (var cfg in startupConfigurations)
                {
                    options.FileProviders.Add(new EmbeddedFileProvider(cfg.Type.GetTypeInfo().Assembly));
                }
            });

            //执行各个模块的启动类
            var instances = startupConfigurations
                            .Select(startup => (IMozStartup)Activator.CreateInstance(startup.Type))
                            .OrderBy(startup => startup.Order);
            foreach (var instance in instances)
            {
                instance.ConfigureServices(services, configuration, webHostEnvironment, mozOptions);
            }

            //services.
            return(services.BuildServiceProvider());
        }