private static ICompositionRoot GetCompositionRoot(IAssemblyWrapper assembly) { var compositionRootType = GetImplementationTypeOfCompositionRoot(assembly); if (compositionRootType != null) { return((ICompositionRoot)compositionRootType.GetNewInstance()); } var registerDependenciesAttributes = assembly.GetAttributes <RegisterDependenciesAttribute>(); var registerDependenciesByAttributes = assembly.GetAttributes <RegisterDependenciesByAttribute>(); if (registerDependenciesAttributes.IsEmpty() && registerDependenciesByAttributes.IsEmpty()) { return(null); } return(new DefaultCompositionRoot(registerDependenciesAttributes, registerDependenciesByAttributes, assembly.Assembly)); }
private static Type GetImplementationTypeOfCompositionRoot(IAssemblyWrapper assembly) { var compositionRootAttributes = assembly.GetAttributes <CompositionRootAttribute>(); if (compositionRootAttributes.Any()) { return(compositionRootAttributes.Single().CompositionRootType); } var compositionRootTypes = SearchCompositionRootTypes(assembly); if (compositionRootTypes.HasSeveralElements()) { throw new SeveralCompositionRootsWasFoundException(assembly, compositionRootTypes); } return(compositionRootTypes.SingleOrDefault()); }