private static void ComposeTypesWithDefaultImplementations(Assembly assembly, ContainerBuilder builder)
{
var dependencies = DefaultIoCRegistrations.RegisterAutoMappingsFromAssembly(assembly);
foreach (var dependency in dependencies)
{
IRegistrationBuilder<object, ConcreteReflectionActivatorData, SingleRegistrationStyle> registration;
if (dependency.IsSingleInstance)
{
// Singleton
registration = builder.RegisterType(dependency.DependencyRequired).SingleInstance();
}
else
{
// Transient
registration = builder.RegisterType(dependency.DependencyRequired).InstancePerDependency();
}
if (!string.IsNullOrWhiteSpace(dependency.NamedInstanceName))
{
// Named Dependency
registration = registration.Named(dependency.NamedInstanceName, dependency.DependencyRequired);
}
registration.AsImplementedInterfaces().AsSelf();
// Register as custom type, other than its own class name, and directly implemented interfaces.
if (dependency.AdditionalRegistrationType != null)
{
registration.As(dependency.AdditionalRegistrationType);
}
}
}
}