public void InitializeContainer(IApplicationContext context, PredefinedService[] predefinedServices) { ((DefaultKernel)Kernel).ComponentModelBuilder = new ComponentModelBuilder(Kernel); Kernel.ReleasePolicy = new ExplicitReleasePolicy(); Connect(RuntimeConstants.MiniKernelId, this, typeof(IKernel)); Connect("kernel", Kernel, typeof(IKernel)); Connect("windsorContainer", this, typeof(IWindsorContainer)); //AddCustomComponents(context); Kernel.AddComponentInstance(RuntimeConstants.RuntimeConfigurationId, typeof(IApplicationContext), context); if (KernelLogger.IsDebugEnabled) { new KernelLogger(Kernel); } Kernel.AddComponentInstance(RuntimeConstants.ProductId, typeof(IApplicationContext), context); //AddCustomFacilities(); AddFacility(ComponentIdAwareFacilityId, new TypeAwareFacility(ComponentIdAwareConcern.ComponentIdAwareModelPropertyName, typeof(IComponentIdAware), ComponentIdAwareConcern.Instance)); AddFacility(ServiceRunnerFacility.ComponentTypeId, new ServiceRunnerFacility()); AddFacility(ComponentFacility.ComponentTypeId, new ComponentFacility()); if (null != context.Arguments) { Connect(RuntimeConstants.ParsedCommandLineArgumentsId, context.Arguments, typeof(ICommandLineArguments)); } _logger.Debug(" + 开始添加预定义的服务..."); foreach (PredefinedService svc in predefinedServices) { Kernel.AddComponent(svc.Id, svc.Service, svc.Implementation); } _logger.Debug(" > 添加预定义的服务完成."); //_initializing = false; //_initialized = true; }
public static int Launch(IApplicationContext context, ICommandLineArguments arguments) { int exitCode = 1; AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; Enforce.ArgumentNotNull <IApplicationContext>(context, "context"); Enforce.ArgumentNotNullOrEmpty(context.ApplicationLaunchableId, "context.ApplicationLaunchableId"); _logger.Debug("开始启动..."); try { using (KernelAdapter containerAdapter = new KernelAdapter()) { containerAdapter.Connect(typeof(IApplicationContext), context); containerAdapter.Connect(RuntimeConstants.AssemblyLoaderServiceId , typeof(IAssemblyLoaderService) , typeof(AssemblyLoaderService)); containerAdapter.Connect(RuntimeConstants.BundleServiceId , typeof(IBundleService) , typeof(BundleService)); containerAdapter.Connect(RuntimeConstants.ExtensionRegistryId , typeof(IExtensionRegistry) , typeof(ExtensionRegistry)); containerAdapter.Start(); IExtensionRegistry registry = containerAdapter.Get <IExtensionRegistry>(); IObjectBuilder builder = containerAdapter.Get <IObjectBuilder>(); using (IDisposable scope = containerAdapter.Lock()) { IExtension[] extensions = registry.GetExtensions(Constants.Points.Services); foreach (IExtension extension in extensions) { containerAdapter.Connect(extension.Id , getServiceTypes(builder, extension) , builder.GetType(extension.Implementation)); } List <object> services = new List <object>(); foreach (IExtension extension in extensions) { services.Add(containerAdapter.GetService(extension.Id)); } foreach (object instance in services) { MicroKernel.Start(instance, containerAdapter); } } IApplicationLaunchable launchable = BuildApplicationLaunchable(context, registry); exitCode = launchable.Launch(context); containerAdapter.Stop(); } } finally { const string exitMsg = "退出代码 {0}."; _logger.InfoFormat(exitMsg, exitCode); AppDomain.CurrentDomain.UnhandledException -= OnUnhandledException; } return(exitCode); }