Esempio n. 1
0
 /// <summary>
 /// Badge service constructor
 /// </summary>
 /// <param name="repository">Repository</param>
 /// <param name="expenseManagerMapper">Mapper</param>
 /// <param name="unitOfWorkProvider">Unit of work provider</param>
 /// <param name="certifierResolver">Resolves badge certifiers according to badge name</param>
 /// <param name="accountBadgeRepository">Repository for accountBadges</param>
 /// <param name="accountsQuery">Query object for retrieving accounts</param>
 /// <param name="notAchievedBadgesQuery">Query for not achieved badges</param>
 internal BadgeService(ExpenseManagerRepository <BadgeModel, Guid> repository, Mapper expenseManagerMapper, IUnitOfWorkProvider unitOfWorkProvider, ExpenseManagerQuery <AccountModel> accountsQuery, IBadgeCertifierResolver certifierResolver, ExpenseManagerRepository <AccountBadgeModel, Guid> accountBadgeRepository, ExpenseManagerQuery <BadgeModel> notAchievedBadgesQuery)
     : base(BusinessLayerDIManager.Resolve <ExpenseManagerQuery <BadgeModel> >("ListBadgesQuery"), repository, expenseManagerMapper, unitOfWorkProvider)
 {
     _accountsQuery          = accountsQuery;
     _certifierResolver      = certifierResolver;
     _accountBadgeRepository = accountBadgeRepository;
     _notAchievedBadgesQuery = notAchievedBadgesQuery as NotAchievedBadgesQuery;
 }
        /// <summary>
        /// This method gets called by the runtime. Use this method to add services to the container.
        /// </summary>
        /// <param name="services"></param>
        public void ConfigureServices(IServiceCollection services)
        {
            // Configure Identity persistence
            IdentityDatabaseInstaller.Install(services, Configuration.GetConnectionString("IdentityConnection"));

            // Configure Business Logic Layer
            BusinessLayerDIManager.BootstrapContainer(new ConnectionOptions {
                ConnectionString = Configuration.GetConnectionString("DefaultConnection")
            });
            services.AddTransient <AccountFacade>();
            services.AddTransient <BalanceFacade>();
            services.AddTransient <ExpenseFacade>();

            // Configure Presentation layer
            services.AddTransient <ICurrentAccountProvider, CurrentAccountProvider>();

            services.AddSession();

            services.AddSingleton <IAuthorizationHandler, HasAccountHandler>();
            services.AddSingleton <IAuthorizationHandler, HasAccessRightsHandler>();

            services.AddSingleton(typeof(Mapper),
                                  provider => {
                var config = new MapperConfiguration(cfg =>
                {
                    cfg.AddProfile <BussinessToViewModelMapping>();
                });
                return(config.CreateMapper());
            });

            services.AddAuthorization(options =>
            {
                options.AddPolicy("HasAccount",
                                  policy => policy.Requirements.Add(new HasAccountRequirement()));
                options.AddPolicy("HasFullRights",
                                  policy => policy.Requirements.Add(new HasAccessRightsRequirement(AccountAccessType.Full)));
            });

            var connectionString = Configuration.GetConnectionString("HangfireConnection");

            //Used for periodic events management
            services.AddHangfire(cfg =>
                                 cfg.UseSqlServerStorage(connectionString,
                                                         new SqlServerStorageOptions {
                QueuePollInterval = TimeSpan.FromSeconds(60)
            }));

            services.AddMvc(options =>
            {
                options.Filters.Add(new RequireHttpsAttribute());
            });
        }
        private static void BootstrapBusinessLayerIoCContainer()
        {
            Func <DbContext> dbContextFactory =
                () => new ExpenseDbContext(Effort.DbConnectionFactory.CreatePersistent(ExpenseManagerTestDbConnection));

            BusinessLayerInstaller.AddCustomComponent(Component.For <IUnitOfWorkProvider>()
                                                      .Instance(Activator.CreateInstance(typeof(ExpenseManagerUnitOfWorkProvider),
                                                                                         BindingFlags.Instance | BindingFlags.NonPublic, null,
                                                                                         new object[]
            {
                dbContextFactory, new HttpContextUnitOfWorkRegistry(
                    new ThreadLocalUnitOfWorkRegistry())
            }, null, null) as ExpenseManagerUnitOfWorkProvider)
                                                      .Named(Guid.NewGuid().ToString())
                                                      .LifestyleSingleton());
            BusinessLayerDIManager.BootstrapContainer(new ConnectionOptions());
        }