MWS.Service.ServiceBootstrapper.Build C# (CSharp) Метод

Build() публичный Метод

public Build ( InstanceCollection instances ) : IUnityContainer
instances InstanceCollection
Результат IUnityContainer
        public IUnityContainer Build(InstanceCollection instances)
        {
            container.RegisterInstance<IEventHandler>(new EventHandler());

            foreach (var i in instances)
            {
                //
                // Core DB objects
                container.RegisterType<IDatabaseFactory, DatabaseFactory>(
                    i.Name,
                    new PerResolveLifetimeManager(),
                    new InjectionConstructor(i.ConnStringName));

                container.RegisterType<IUnitOfWork, UnitOfWork>(
                    i.Name,
                    new PerResolveLifetimeManager(),
                    new InjectionConstructor(new ResolvedParameter<IDatabaseFactory>(i.Name)));
                //
                // Repositories
                container.RegisterType<IEmailRepository, EmailRepository>(
                    i.Name,
                    new PerResolveLifetimeManager(),
                    new InjectionConstructor(new ResolvedParameter<IDatabaseFactory>(i.Name)));

                container.RegisterType<IWorkOrderRepository, WorkOrderRepository>(
                    i.Name,
                    new PerResolveLifetimeManager(),
                    new InjectionConstructor(new ResolvedParameter<IDatabaseFactory>(i.Name)));

                container.RegisterType<IWorkAssignmentRepository, WorkAssignmentRepository>(
                    i.Name,
                    new PerResolveLifetimeManager(),
                    new InjectionConstructor(new ResolvedParameter<IDatabaseFactory>(i.Name)));

                container.RegisterType<IWorkerRepository, WorkerRepository>(
                    i.Name,
                    new PerResolveLifetimeManager(),
                    new InjectionConstructor(
                        new ResolvedParameter<IDatabaseFactory>(i.Name)
                        )
                    );

                container.RegisterType<IWorkerSigninRepository, WorkerSigninRepository>(
                    i.Name,
                    new PerResolveLifetimeManager(),
                    new InjectionConstructor(new ResolvedParameter<IDatabaseFactory>(i.Name)));

                container.RegisterType<ILookupRepository, LookupRepository>(
                    i.Name,
                    new PerResolveLifetimeManager(),
                    new InjectionConstructor(new ResolvedParameter<IDatabaseFactory>(i.Name)));

                container.RegisterType<ILookupCache, LookupCache>(
                    i.Name,
                    new PerResolveLifetimeManager(),
                    new InjectionConstructor(new ResolvedParameter<IDatabaseFactory>(i.Name)));

                container.RegisterType<IWorkerCache, WorkerCache>(
                    i.Name,
                    new PerResolveLifetimeManager(),
                    new InjectionConstructor(new ResolvedParameter<Func<IDatabaseFactory>>(i.Name))
                    );

                //
                // Services
                container.RegisterType<IEmailService, EmailService>(
                    i.Name,
                    new PerResolveLifetimeManager(),
                    new InjectionConstructor(
                        new ResolvedParameter<IEmailRepository>(i.Name),
                        new ResolvedParameter<IWorkOrderService>(i.Name),
                        new ResolvedParameter<IUnitOfWork>(i.Name)
                        )
                    );

                container.RegisterType<IWorkOrderService, WorkOrderService>(
                    i.Name,
                    new PerResolveLifetimeManager(),
                    new InjectionConstructor(
                        new ResolvedParameter<IWorkOrderRepository>(i.Name),
                        new ResolvedParameter<IWorkAssignmentService>(i.Name),
                        new ResolvedParameter<IUnitOfWork>(i.Name)
                        )
                    );

                container.RegisterType<IWorkAssignmentService, WorkAssignmentService>(
                    i.Name,
                    new PerResolveLifetimeManager(),
                    new InjectionConstructor(
                        new ResolvedParameter<IWorkAssignmentRepository>(i.Name),
                        new ResolvedParameter<IWorkerRepository>(i.Name),
                        new ResolvedParameter<ILookupRepository>(i.Name),
                        new ResolvedParameter<IWorkerSigninRepository>(i.Name),
                        new ResolvedParameter<IWorkerCache>(i.Name),
                        new ResolvedParameter<ILookupCache>(i.Name),
                        new ResolvedParameter<IUnitOfWork>(i.Name)
                        )
                    );

                container.RegisterType<IEmailServiceProvider, EmailServiceProvider>(
                    i.Name,
                    new PerResolveLifetimeManager(),
                    new InjectionConstructor(
                        new ResolvedParameter<Func<IEmailQueueManager>>(i.Name),
                        new ResolvedParameter<Func<IDatabaseFactory>>(i.Name)
                        )
                    );

                container.RegisterType<IEmailQueueManager, EmailQueueManager>(
                    i.Name,
                    new PerResolveLifetimeManager(),
                    new InjectionConstructor(
                            new ResolvedParameter<IEmailService>(i.Name),
                            new ResolvedParameter<IUnitOfWork>(i.Name)
                        )
                    );
                //container.RegisterType<IWorkerService, WorkerService>();
                //container.RegisterType<IWorkerSigninService, WorkerSigninService>();
                //container.RegisterType<ILookupService, LookupService>();
                //// LookupCache will populate static values in the domain for service lookups
            }
            return container;
        }

Usage Example

        /// <summary>
        /// Service process called by the Program.Main
        /// </summary>
        /// <param name="unity"></param>
        public MacheteWindowsService()
        {
            this.ServiceName = EventViewerConfig.source;
            var bootstrapper = new ServiceBootstrapper();
            var cfg = ConfigurationManager.GetSection(AppConfig.sourceNode) as MacheteWindowsServiceConfiguration;

            // Report # of configs read
            // detect change and re-read?
            try
            {
                container = bootstrapper.Build(cfg.Instances);
            }
            catch (Exception e)
            {
                var eventhandler = new EventHandler();
                eventhandler.MWSEventLog.WriteEntry(e.ToString());
                throw e;
            }

            this.MWSEventLog = container.Resolve<IEventHandler>().MWSEventLog;
            //
            //
            // TODO some notice if the config file is empty
            foreach (Instance instanceCfg in cfg.Instances)
            {
                instances.Add(new MacheteInstance(container.Resolve<IEmailServiceProvider>(instanceCfg.Name), instanceCfg));
            }
        }
All Usage Examples Of MWS.Service.ServiceBootstrapper::Build
ServiceBootstrapper