예제 #1
0
        /// <summary>
        /// Called when the service starts.
        /// </summary>
        /// <param name="args">The arguments.</param>
        protected override void OnStart(string[] args)
        {
            if (!AllowMultipleServiceStarts && !IsNewInstance)
            {
                return;
            }

            Modules = null;

            var assemblyFileLocation = Assembly.GetExecutingAssembly().Location;
            var assemblyFileInfo     = new FileInfo(assemblyFileLocation);
            var path = assemblyFileInfo.Directory?.FullName;

            if (path == null)
            {
                return;
            }

            var executableDirectory = new DirectoryInfo(path);
            var moduleDirectory     = new DirectoryInfo(Path.Combine(executableDirectory.FullName, "Modules"));

            using (var catalog = new AggregateCatalog(new DirectoryCatalog(executableDirectory.FullName)))
            {
                if (moduleDirectory.Exists)
                {
                    catalog.Catalogs.Add(new DirectoryCatalog(moduleDirectory.FullName));
                }

                using (var container = new CompositionContainer(catalog))
                {
                    container.ComposeParts(this);
                    Modules = container.GetExportedValues <IServiceModule>();
                }
            }

            Modules?.AsParallel().ForAll(w => w.OnStartAsync(args));
        }
예제 #2
0
 /// <summary>
 /// Called when the service stops.
 /// </summary>
 protected override void OnStop()
 {
     Modules?.AsParallel().ForAll(w => w.OnStopAsync());
 }
예제 #3
0
 /// <summary>
 /// Called when the service is paused.
 /// </summary>
 protected override void OnPause()
 {
     Modules?.AsParallel().ForAll(w => w.OnPauseAsync());
 }
예제 #4
0
 /// <summary>
 /// Called when service shutdown is encountered..
 /// </summary>
 protected override void OnShutdown()
 {
     Modules?.AsParallel().ForAll(w => w.OnShutdownAsync());
 }
예제 #5
0
 /// <summary>
 /// Called when a custom command is encountered.
 /// </summary>
 /// <param name="command">The command code.</param>
 protected override void OnCustomCommand(int command)
 {
     Modules?.AsParallel().ForAll(w => w.OnCustomCommandAsync(command));
 }