ServiceRegistrator
class ServiceRegistrator
using System;
using System.Linq;
namespace Stashbox.Registration
{
internal class ServiceRegistrator
{
public void Register(IContainerContext containerContext, ServiceRegistration serviceRegistration, Type serviceType)
{
if (serviceRegistration.RegistrationContext.AdditionalServiceTypes.Any()) {
foreach (Type additionalServiceType in serviceRegistration.RegistrationContext.AdditionalServiceTypes) {
RegisterInternal(containerContext, serviceRegistration, additionalServiceType);
}
}
RegisterInternal(containerContext, serviceRegistration, serviceType);
}
private void RegisterInternal(IContainerContext containerContext, ServiceRegistration serviceRegistration, Type serviceType)
{
if (serviceRegistration.IsDecorator) {
containerContext.DecoratorRepository.AddDecorator(serviceType, serviceRegistration, false);
containerContext.RootScope.InvalidateDelegateCache();
} else if (containerContext.RegistrationRepository.AddOrUpdateRegistration(serviceRegistration, serviceType)) {
containerContext.RootScope.InvalidateDelegateCache();
}
}
public void ReMap(IContainerContext containerContext, ServiceRegistration serviceRegistration, Type serviceType)
{
if (serviceRegistration.RegistrationContext.AdditionalServiceTypes.Any()) {
foreach (Type additionalServiceType in serviceRegistration.RegistrationContext.AdditionalServiceTypes) {
ReMapInternal(containerContext, serviceRegistration, additionalServiceType);
}
}
ReMapInternal(containerContext, serviceRegistration, serviceType);
}
private void ReMapInternal(IContainerContext containerContext, ServiceRegistration serviceRegistration, Type serviceType)
{
if (serviceRegistration.IsDecorator)
containerContext.DecoratorRepository.AddDecorator(serviceType, serviceRegistration, true);
else
containerContext.RegistrationRepository.AddOrReMapRegistration(serviceRegistration, serviceType);
containerContext.RootScope.InvalidateDelegateCache();
}
}
}