public static void Populate(this IUnityContainer container,
            IServiceCollection services)
        {
            container.AddExtension(new EnumerableResolutionExtension());

            container.RegisterInstance(services);
            container.RegisterType<IServiceProvider, UnityServiceProvider>();
            container.RegisterType<IServiceScopeFactory, UnityServiceScopeFactory>();

            foreach (var descriptor in services)
            {
                Register(container, descriptor);
            }
        }
 internal static void SetHeaders(this Bundle.BundleEntryResponseComponent interaction, WebHeaderCollection headers)
 {
     foreach (var key in headers.AllKeys)
     {
         interaction.AddExtension(EXTENSION_RESPONSE_HEADER, new FhirString(key + ":" + headers[key]));
     }
 }
示例#3
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="observable"></param>
 /// <param name="name"></param>
 /// <param name="options"></param>
 /// <returns></returns>
 public static Observable ExtendWith(this Observable observable, string name, string options)
 {
     observable.AddExtension(name, options);
     return observable;
 }
        /// <summary>
        /// Enables Managed Extensibility Framework two-way integration.
        /// </summary>
        /// <param name="unityContainer">Target container.</param>
        /// <returns>
        /// <see cref="CompositionIntegration"/> instance.
        /// </returns>
        public static CompositionIntegration EnableCompositionIntegration(
            this IUnityContainer unityContainer)
        {
            lock (unityContainer)
            {
                var extension = unityContainer.Configure<CompositionIntegration>();
                if (extension == null)
                {
                    var adapter = new UnityContainerAdapter(unityContainer);
                    var containerExportProvider = new ContainerExportProvider(adapter);
                    var parentExtension = (CompositionIntegration) null;

                    if (unityContainer.Parent != null)
                    {
                        parentExtension = unityContainer.Parent.Configure<CompositionIntegration>();
                    }

                    if (parentExtension != null)
                    {
                        // Get the parent ContainerExportProvider
                        var parentContainerExportProvider = (ContainerExportProvider)parentExtension.Providers.Where(
                            ep => typeof(ContainerExportProvider).IsAssignableFrom(ep.GetType())).First();

                        // Collect all the exports provided by the parent container and add
                        // them to the child export provider
                        foreach (var definition in parentContainerExportProvider.RegistrationBasedFactoryExportProvider.ReadOnlyDefinitions)
                        {
                            containerExportProvider.RegistrationBasedFactoryExportProvider.Register(
                                definition.ContractType,
                                definition.RegistrationName);
                        }

                        // Grab all the parent export providers except the container ones
                        var parentExporters = new List<ExportProvider>(
                            parentExtension.Providers.Where(
                                ep => !typeof (ContainerExportProvider).IsAssignableFrom(ep.GetType())))
                                                  { containerExportProvider };

                        var catalog = new AggregateCatalog(parentExtension.Catalogs);

                        extension = new CompositionIntegration(true, parentExporters.ToArray());
                        extension.Catalogs.Add(catalog);
                    }
                    else
                    {
                        extension = new CompositionIntegration(true, containerExportProvider);
                    }

                    unityContainer.AddExtension(extension);
                }

                return extension;
            }
        }