/// <summary>
        /// Initializes a new instance of the <see cref="ApplicationContext"/> class.
        /// </summary>
        /// <param name="options">A reference to the application configuration.</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,
            IItemTypesLoader itemTypeLoader,
            IMonsterTypesLoader monsterTypeLoader,
            TelemetryClient telemetryClient,
            CancellationTokenSource cancellationTokenSource,
            Func <IFibulaDbContext> dbContextGenerationFunc)
        {
            options.ThrowIfNull(nameof(options));
            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.CancellationTokenSource = cancellationTokenSource;

            this.TelemetryClient = telemetryClient;

            this.itemTypeLoader            = itemTypeLoader;
            this.monsterTypeLoader         = monsterTypeLoader;
            this.contextGenerationFunction = dbContextGenerationFunc;
        }
示例#2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MonsterTypeReadOnlyRepository"/> class.
        /// </summary>
        /// <param name="monsterTypeLoader">A reference to the monster type loader in use.</param>
        public MonsterTypeReadOnlyRepository(IMonsterTypesLoader monsterTypeLoader)
        {
            monsterTypeLoader.ThrowIfNull(nameof(monsterTypeLoader));

            if (monsterTypeCatalog == null)
            {
                lock (MonsterTypeCatalogLock)
                {
                    if (monsterTypeCatalog == null)
                    {
                        monsterTypeCatalog = monsterTypeLoader.LoadTypes();
                    }
                }
            }
        }