示例#1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ApplicationContext"/> class.
        /// </summary>
        /// <param name="options">A reference to the application configuration.</param>
        /// <param name="rsaDecryptor">A reference to the RSA decryptor in use.</param>
        /// <param name="itemTypeLoader">A reference to the item type loader in use.</param>
        /// <param name="monsterTypeLoader">A reference to the monster type loader in use.</param>
        /// <param name="telemetryClient">A reference to the telemetry client.</param>
        /// <param name="cancellationTokenSource">A reference to the master cancellation token source.</param>
        /// <param name="dbContextGenerationFunc">A reference to a function to generate the database context.</param>
        public ApplicationContext(
            IOptions <ApplicationContextOptions> options,
            IRsaDecryptor rsaDecryptor,
            IItemTypeLoader itemTypeLoader,
            IMonsterTypeLoader monsterTypeLoader,
            TelemetryClient telemetryClient,
            CancellationTokenSource cancellationTokenSource,
            Func <IFibulaDbContext> dbContextGenerationFunc)
        {
            options.ThrowIfNull(nameof(options));
            rsaDecryptor.ThrowIfNull(nameof(rsaDecryptor));
            itemTypeLoader.ThrowIfNull(nameof(itemTypeLoader));
            monsterTypeLoader.ThrowIfNull(nameof(monsterTypeLoader));
            cancellationTokenSource.ThrowIfNull(nameof(cancellationTokenSource));
            dbContextGenerationFunc.ThrowIfNull(nameof(dbContextGenerationFunc));

            DataAnnotationsValidator.ValidateObjectRecursive(options.Value);

            this.Options                 = options.Value;
            this.RsaDecryptor            = rsaDecryptor;
            this.CancellationTokenSource = cancellationTokenSource;

            this.TelemetryClient = telemetryClient;

            this.itemTypeLoader            = itemTypeLoader;
            this.monsterTypeLoader         = monsterTypeLoader;
            this.contextGenerationFunction = dbContextGenerationFunc;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="UnitOfWork"/> class.
        /// </summary>
        /// <param name="applicationContext">The application context to work in.</param>
        /// <param name="itemTypeLoader">A reference to the item type loader in use.</param>
        /// <param name="monsterTypeLoader">A reference to the monster type loader in use.</param>
        public UnitOfWork(IApplicationContext applicationContext, IItemTypeLoader itemTypeLoader, IMonsterTypeLoader monsterTypeLoader)
        {
            applicationContext.ThrowIfNull(nameof(applicationContext));

            this.applicationContext = applicationContext;

            this.databaseContextLock = new object();

            this.accounts = new Lazy <AccountRepository>(
                () =>
            {
                this.GetOrInitializeDbContext();

                return(new AccountRepository(this.databaseContext));
            },
                System.Threading.LazyThreadSafetyMode.None);

            this.characters = new Lazy <CharacterRepository>(
                () =>
            {
                this.GetOrInitializeDbContext();

                return(new CharacterRepository(this.databaseContext));
            },
                System.Threading.LazyThreadSafetyMode.None);

            this.MonsterTypes = new MonsterTypeReadOnlyRepository(monsterTypeLoader);

            this.ItemTypes = new ItemTypeReadOnlyRepository(itemTypeLoader);
        }
示例#3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ItemFactory"/> class.
        /// </summary>
        /// <param name="itemLoader">A reference to the item type loader to use.</param>
        public ItemFactory(IItemTypeLoader itemLoader)
        {
            itemLoader.ThrowIfNull(nameof(itemLoader));

            this.ItemTypeLoader = itemLoader;

            this.itemTypesCatalog = this.ItemTypeLoader.LoadTypes();
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ItemTypeReadOnlyRepository"/> class.
        /// </summary>
        /// <param name="itemTypeLoader">A reference to the item type loader in use.</param>
        public ItemTypeReadOnlyRepository(IItemTypeLoader itemTypeLoader)
        {
            itemTypeLoader.ThrowIfNull(nameof(itemTypeLoader));

            if (itemTypeCatalog == null)
            {
                lock (ItemTypeCatalogLock)
                {
                    if (itemTypeCatalog == null)
                    {
                        itemTypeCatalog = itemTypeLoader.LoadTypes();
                    }
                }
            }
        }