Пример #1
0
            internal Cookies(KernelAdapter adapter)
            {
                Enforce.ArgumentNotNull(adapter, "adapter");

                _adapter   = adapter;
                _isStarted = _adapter.Pause();
            }
Пример #2
0
 public ObjectBuilder(KernelAdapter kernel)
 {
     _kernelAdapter = kernel;
 }
Пример #3
0
        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);
        }