コード例 #1
0
        public void FailToCreateModulesFromNullFile()
        {
            var factory = new CalculatorModuleFactory();

            Assert.Throws <ArgumentNullException>(() =>
            {
                var module = factory.CreateFromFiles(null);
            });
        }
コード例 #2
0
        public void FailToCreateModulesFromEmptyFile()
        {
            var factory = new CalculatorModuleFactory();

            Assert.Throws <ArgumentException>(() =>
            {
                var module = factory.CreateFromFiles(string.Empty);
            });
        }
コード例 #3
0
        public void FailToCreateModulesFromSingleRelativePathFile()
        {
            var factory = new CalculatorModuleFactory();

            Assert.Throws <ArgumentException>(() =>
            {
                var module = factory.CreateFromFiles(Path.Combine(Definitions.CalculatorDirectory, Definitions.CalculatorExtensionFileName));
            });
        }
コード例 #4
0
        public void FailToCreateModulesFromSingleRelativePathDirectory()
        {
            var factory = new CalculatorModuleFactory();

            Assert.Throws <ArgumentException>(() =>
            {
                var module = factory.CreateFromDirectories(Definitions.CalculatorDirectory);
            });
        }
コード例 #5
0
        public void SuccessfullyCreateModulesFromSingleAbsolutePathFile()
        {
            var factory = new CalculatorModuleFactory();

            var directory = Path.GetFullPath(Path.Combine(Definitions.CalculatorDirectory, Definitions.CalculatorExtensionFileName));

            var module = factory.CreateFromFiles(directory);

            Assert.NotNull(module);
            Assert.NotEmpty(module);
        }
コード例 #6
0
        public void SuccessfullyCreateModulesFromSingleAbsolutePathDirectory()
        {
            var factory = new CalculatorModuleFactory();

            var directory = Path.GetFullPath(Definitions.CalculatorDirectory);

            var module = factory.CreateFromDirectories(directory);

            Assert.NotNull(module);
            Assert.NotEmpty(module);
        }
コード例 #7
0
        private static void LoadRepository(CalculatorRepository repository, string calculatorDirectory)
        {
            var factory = new CalculatorModuleFactory();
            var modules = factory.CreateFromDirectories(calculatorDirectory);

            foreach (var module in modules)
            {
                System.Diagnostics.Trace.WriteLine($"Loaded module: {module.Function.FunctionInfo.Name}");
            }

            var id = 0;

            repository.UpdateStore(modules.Select(i => new Calculator(++id, i)));
        }
コード例 #8
0
        public static ICalculatorRepository InitializeCalculatorStore(this IServiceCollection services, string calculatorDirectory)
        {
            var di = Directory.CreateDirectory(calculatorDirectory);
            var fullDirectoryPath = di.FullName;

            var factory    = new CalculatorModuleFactory();
            var repository = new CalculatorRepository();

            FileSystemWatcher = new FileSystemWatcher()
            {
                Path                = calculatorDirectory,
                Filter              = "*.dll",
                NotifyFilter        = NotifyFilters.FileName | NotifyFilters.LastWrite,
                EnableRaisingEvents = true
            };

            FileSystemWatcher.Changed += (s, e) =>
            {
                LoadRepository(repository, fullDirectoryPath);
            };

            FileSystemWatcher.Created += (s, e) =>
            {
                LoadRepository(repository, fullDirectoryPath);
            };

            FileSystemWatcher.Deleted += (s, e) =>
            {
                LoadRepository(repository, fullDirectoryPath);
            };

            LoadRepository(repository, fullDirectoryPath);

            services.AddSingleton <ICalculatorRepository>(repository);

            return(repository);
        }