/// <summary> /// Зарегистрировать логику /// </summary> /// <param name="appBuilder"></param> /// <param name="settings"></param> public static void RegisterLogic(CrocoApplicationBuilder appBuilder, EccSettings settings) { Check(appBuilder); var services = appBuilder.Services; services.AddHttpClient <OneSignalClient>(); RegisterServices <CltUserMasterStorage>(services, settings); services.AddScoped <IFileMasterStorage, CrocoFileMasterStorage>(); RegisterEccWorkerTypes(services); AddMessageHandlers(appBuilder); var descriptionBuilder = appBuilder.IntegrationMessagesDescriptorBuilder; descriptionBuilder .AddMessageDescription <CreateUserCommand>("Команда для создания пользователя", IntegrationMessageType.Command) .AddMessageDescription <UpdateUserCommand>("Команда для обновления данных пользователя", IntegrationMessageType.Command) .AddMessageDescription <AppendEmailsFromFileToGroup>("Команда для добавления эмейлов в групу из файла", IntegrationMessageType.Command) .AddMessageDescription <SendMailsForEmailGroup>("Команда для отправки эмейлов для групы", IntegrationMessageType.Command); descriptionBuilder .AddMessageDescription <ChatCreatedEvent>("Событие о том, что чат создался", IntegrationMessageType.Event) .AddMessageDescription <ChatRelationUpdatedEvent>("Событие о том, что пользователь посетил чат или зашёл в него", IntegrationMessageType.Event); }
/// <summary> /// Зарегистрировать клиентскую логику /// </summary> /// <param name="applicationBuilder"></param> /// <param name="setupAction"></param> public static void Register(CrocoApplicationBuilder applicationBuilder, Action <IdentityOptions> setupAction = null) { Check(applicationBuilder); var services = applicationBuilder.Services; services.AddScoped <IApplicationAuthenticationManager, ApplicationAuthenticationManager>(); services.AddScoped <IClientDataRefresher, ClientDataRefresher>(); setupAction ??= config => { config.SignIn.RequireConfirmedEmail = false; config.Password.RequiredLength = 8; }; services.AddIdentity <ApplicationUser, ApplicationRole>(setupAction) .AddEntityFrameworkStores <CltDbContext>() .AddDefaultTokenProviders(); RegisterCltWorkerTypes(services); services.AddSingleton <CltPasswordValidator>(); applicationBuilder .RegisterHealthCheck <CltSettingsHealthCheck>() .RegisterHealthCheck <RootHealthCheck>(); applicationBuilder.IntegrationMessagesDescriptorBuilder .AddMessageDescription <ClientStartedRestoringPasswordEvent>("Выбрасывается в систему, когда клиент начинает процедуру сброса пароля", IntegrationMessageType.Event) .AddMessageDescription <ClientChangedPassword>("Выбрасывыется в систему, когда клиент закончил процедуру изменения пароля", IntegrationMessageType.Event) .AddMessageDescription <ClientDataUpdatedEvent>("Выбрасывается в систему, когда данные клиента обновляются либо администратором либо самим клиентом", IntegrationMessageType.Event) .AddMessageDescription <ClientRegisteredEvent>("Выбрасывается в систему, когда клиент прошёл регистрацию", IntegrationMessageType.Event); }
private static void RegisterInner <TClientStorage>(CrocoApplicationBuilder appBuilder, Func <IPrincipal, bool> isAdminChecker, Action registerClientStorageFunc) where TClientStorage : class, IUsersStorage { Check(appBuilder); var services = appBuilder.Services; services.AddSingleton(new PrincipalCheker(isAdminChecker)); registerClientStorageFunc(); services.AddScoped <DayTasksService>(); services.AddScoped <DayTaskCommentService>(); }
private static void AddMessageHandlers(CrocoApplicationBuilder appBuilder) { var eventSourceOptions = appBuilder.EventSourceOptions; eventSourceOptions .AddMessageHandler <CreateUserCommand, CreateUserCommandHandler>() .AddMessageHandler <UpdateUserCommand, UpdateUserCommandHandler>() .AddMessageHandler <AppendEmailsFromFileToGroup, AppendEmailsFromFileToGroupMessageHandler>() .AddMessageHandler <SendMailsForEmailGroup, SendMailsForEmailGroupMessageHandler>() .AddMessageHandler <ClientRegisteredEvent, ClientRegisteredEventHandler>(true) .AddMessageHandler <ClientDataUpdatedEvent, ClientDataUpdatedEventHandler>(true) .AddMessageHandler <FilesUploadedEvent, FilesUploadedEventHandler>(true); }
public static async Task <IServiceProvider> BuildCltAppAndGetServiceProvider() { var services = new ServiceCollection(); services.AddLogging(); services.AddScoped(srv => MySqLiteFileDatabaseExtensions.Create <CrocoInternalDbContext>(opts => new CrocoInternalDbContext(opts), "croco")); services.AddScoped(srv => MySqLiteFileDatabaseExtensions.Create <CltDbContext>(opts => new CltDbContext(opts), "clt")); var appBuilder = new CrocoApplicationBuilder(services); appBuilder.RegisterVirtualPathMapper(Directory.GetCurrentDirectory()); appBuilder.RegisterFileStorage(new CrocoFileOptions { SourceDirectory = Directory.GetCurrentDirectory(), ImgFileResizeSettings = new Dictionary <string, ImgFileResizeSetting>() }); DbFileManagerServiceCollectionExtensions.RegisterDbFileManager(appBuilder); CltLogicRegistrator.Register(appBuilder); appBuilder.CheckAndRegisterApplication <CrocoApplication>(); var srvProvider = services.BuildServiceProvider(); appBuilder.SetAppAndActivator(srvProvider); var scope = srvProvider.CreateScope(); InitializeDatabasesAsEmpty(scope); scope.ServiceProvider .GetRequiredService <ICrocoRequestContextAccessor>() .SetRequestContext(SystemCrocoExtensions.GetRequestContext()); var accountInitiator = scope.ServiceProvider .GetRequiredService <AccountInitiator>(); await accountInitiator.CreateRootUserAsync(); return(srvProvider); }
private static void Check(CrocoApplicationBuilder appBuilder) { new EFCrocoApplicationRegistrator(appBuilder).RegiterIfNeedEFDataCoonection <EccDbContext>(); DbFileManagerServiceCollectionExtensions.CheckForDbFileManager(appBuilder.Services); }
/// <summary> /// Зарегистрировать контекст /// </summary> /// <typeparam name="TUsersStorage"></typeparam> /// <param name="appBuilder"></param> /// <param name="regiteringStorage"></param> /// <param name="isAdminChecker"></param> public static void Register <TUsersStorage>(CrocoApplicationBuilder appBuilder, Func <IServiceProvider, TUsersStorage> regiteringStorage, Func <IPrincipal, bool> isAdminChecker) where TUsersStorage : class, IUsersStorage { RegisterInner <TUsersStorage>(appBuilder, isAdminChecker, () => appBuilder.Services.AddScoped <IUsersStorage, TUsersStorage>(regiteringStorage)); }