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); } }
public ScheduleTaskController(IScheduleTaskService scheduleTaskService, IOptions <MozOptions> mozOptions) { _scheduleTaskService = scheduleTaskService; _mozOptions = mozOptions.Value; }
public void Configure(IApplicationBuilder application, IConfiguration configuration, IWebHostEnvironment webHostEnvironment, MozOptions mozOptions) { }
public void ConfigureServices(IServiceCollection services, IConfiguration configuration, IWebHostEnvironment webHostEnvironment, MozOptions mozOptions) { }
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()); }