private IContainer BuildApplicationObjectGraph(ContainerBuilder builder, params Assembly[] assemblies)
{
// Build Application Object Graph
var container = builder.Build();
Logger = container.Resolve<ILogger>();
// Ensure anything requiring property injection is assigned a value.
foreach (Assembly assembly in assemblies)
{
var requiredPropertyInjections = DefaultIoCRegistrations.ProcessPropertyInjection(assembly);
foreach (PropertyInjectionDependencyRequirement requirement in requiredPropertyInjections)
{
// Some reasonably awkard Autofac usage here to allow testibility. (Extension methods aren't easy to test)
IComponentRegistration registration;
bool success = container.ComponentRegistry.TryGetRegistration(new TypedService(requirement.DependencyRequired), out registration);
if (success)
{
object dependency = container.ResolveComponent(registration, Enumerable.Empty<Parameter>());
requirement.PropertyInjectionAssignment(dependency);
}
}
}
ConstructUiContext(container);
return container;
}