void UpdateInitialisedAdapters(IComponentRegistration registration)
        {
            var adapterServices = new List <Service>(_serviceInfo.Count);

            foreach (var kv in _serviceInfo)
            {
                if (kv.Value.ShouldRecalculateAdaptersOn(registration))
                {
                    adapterServices.Add(kv.Key);
                }
            }

            if (adapterServices.Count == 0)
            {
                return;
            }

            Debug.WriteLine(
                "[Autofac] Component '{0}' provides services that have already been adapted. Consider refactoring to ContainerBuilder.Build() rather than Update().",
                registration);

            var drs = _dynamicRegistrationSourcesArray;

            if (drs == null)
            {
                drs = new IRegistrationSource[_dynamicRegistrationSources.Count];
                _dynamicRegistrationSources.CopyTo(drs, 0);
                _dynamicRegistrationSourcesArray = drs;
            }

            var adaptationSandbox = new AdaptationSandbox(
                drs.Where(rs => rs.IsAdapterForIndividualComponents),
                registration,
                adapterServices);

            var adapters = adaptationSandbox.GetAdapters();

            foreach (var adapter in adapters)
            {
                AddRegistration(adapter, true);
            }
        }
Beispiel #2
0
		void UpdateInitialisedAdapters(IComponentRegistration registration)
		{
			var adapterServices = new List<Service>(_serviceInfo.Count);
			foreach (var kv in _serviceInfo)
				if (kv.Value.ShouldRecalculateAdaptersOn(registration))
					adapterServices.Add(kv.Key);

			if (adapterServices.Count == 0)
				return;

			Debug.WriteLine(String.Format(
				"[Autofac] Component '{0}' provides services that have already been adapted. Consider refactoring to ContainerBuilder.Build() rather than Update().",
				registration));

			var drs = _dynamicRegistrationSourcesArray;
			if (drs == null)
			{
				drs = new IRegistrationSource[_dynamicRegistrationSources.Count];
				_dynamicRegistrationSources.CopyTo(drs, 0);
				_dynamicRegistrationSourcesArray = drs;
			}

			var adaptationSandbox = new AdaptationSandbox(
				drs.Where(rs => rs.IsAdapterForIndividualComponents),
				registration,
				adapterServices);

			var adapters = adaptationSandbox.GetAdapters();
			foreach (var adapter in adapters)
				AddRegistration(adapter, true);
		}