Exemple #1
0
        public Type FindSingle(IContractToImplementorsMap types, Type type)
        {
            var typesFound = types.GetImplementorsFor(type);

            ThrowIfMultipleTypesFound(type, typesFound);
            return(typesFound.SingleOrDefault());
        }
Exemple #2
0
        /// <summary>
        /// Initializes a new instance of <see cref="TypeFinder"/>
        /// </summary>
        /// <param name="assemblies"><see cref="IAssemblies"/> for getting assemblies</param>
        /// <param name="contractToImplementorsMap"><see cref="IContractToImplementorsMap"/> for keeping track of the relationship between contracts and implementors</param>
        public TypeFinder(IAssemblies assemblies, IContractToImplementorsMap contractToImplementorsMap)
        {
            _assemblies = assemblies;
            _contractToImplementorsMap = contractToImplementorsMap;

            CollectTypes();
        }
Exemple #3
0
        public Type FindTypeByFullName(IContractToImplementorsMap types, string fullName)
        {
            var typeFound = types.All.Where(t => t.FullName == fullName).SingleOrDefault();

            ThrowIfTypeNotFound(fullName, typeFound);
            return(typeFound);
        }
Exemple #4
0
        /// <summary>
        /// Initializes a new instance of <see cref="TypeDiscoverer">TypeDiscoverer</see>
        /// </summary>
        /// <param name="assemblies"><see cref="IAssemblies"/> for getting assemblies</param>
        /// <param name="typeFinder"><see cref="ITypeFinder"/> for finding types from all collected types</param>
        /// <param name="contractToImplementorsMap"><see cref="IContractToImplementorsMap"/> for keeping track of the relationship between contracts and implementors</param>
        public TypeDiscoverer(IAssemblies assemblies, ITypeFinder typeFinder, IContractToImplementorsMap contractToImplementorsMap)
        {
            _assemblies = assemblies;
            _typeFinder = typeFinder;
            _contractToImplementorsMap = contractToImplementorsMap;

            CollectTypes();
        }
Exemple #5
0
 /// <summary>
 /// Configure with a specific <see cref="IContainer"/>.
 /// </summary>
 /// <param name="container"><see cref="IContainer"/> to configure with.</param>
 /// <param name="assembliesConfiguration"><see cref="AssembliesConfiguration"/> to use.</param>
 /// <param name="assemblyProvider"><see cref="IAssemblyProvider"/> to use for providing assemblies.</param>
 /// <param name="contractToImplementorsMap"><see cref="IContractToImplementorsMap"/> for keeping track of
 /// the relationship between contracts and implementors.</param>
 /// <returns>Configuration object to continue configuration on.</returns>
 public static Configure With(
     IContainer container,
     AssembliesConfiguration assembliesConfiguration,
     IAssemblyProvider assemblyProvider,
     IContractToImplementorsMap contractToImplementorsMap)
 {
     return(With(
                container,
                new DefaultConventions(container),
                new DefaultBindings(assembliesConfiguration, assemblyProvider, contractToImplementorsMap),
                assembliesConfiguration));
 }
Exemple #6
0
        /// <summary>
        /// Initializes a new instance of <see cref="AssemblyProvider"/>
        /// </summary>
        /// <param name="assemblyProviders"><see cref="IEnumerable{ICanProvideAssemblies}">Providers</see> to provide assemblies</param>
        /// <param name="assemblyFilters"><see cref="IAssemblyFilters"/> to use for filtering assemblies through</param>
        /// <param name="assemblyUtility">An <see cref="IAssemblyUtility"/></param>
        /// <param name="assemblySpecifiers"><see cref="IAssemblySpecifiers"/> used for specifying what assemblies to include or not</param>
        /// <param name="contractToImplementorsMap"><see cref="IContractToImplementorsMap"/> for keeping track of the relationship between contracts and implementors</param>
        public AssemblyProvider(
            IEnumerable<ICanProvideAssemblies> assemblyProviders,
            IAssemblyFilters assemblyFilters, 
            IAssemblyUtility assemblyUtility,
            IAssemblySpecifiers assemblySpecifiers,
            IContractToImplementorsMap contractToImplementorsMap)
        {
            _assemblyProviders = assemblyProviders;
            _assemblyFilters = assemblyFilters;
            _assemblyUtility = assemblyUtility;
            _assemblySpecifiers = assemblySpecifiers;
            _contractToImplementorsMap = contractToImplementorsMap;

            HookUpAssemblyAddedForProviders();
            Populate();
        }
Exemple #7
0
        /// <summary>
        /// Initializes a new instance of <see cref="AssemblyProvider"/>
        /// </summary>
        /// <param name="assemblyProviders"><see cref="IEnumerable{ICanProvideAssemblies}">Providers</see> to provide assemblies</param>
        /// <param name="assemblyFilters"><see cref="IAssemblyFilters"/> to use for filtering assemblies through</param>
        /// <param name="assemblyUtility">An <see cref="IAssemblyUtility"/></param>
        /// <param name="assemblySpecifiers"><see cref="IAssemblySpecifiers"/> used for specifying what assemblies to include or not</param>
        /// <param name="contractToImplementorsMap"><see cref="IContractToImplementorsMap"/> for keeping track of the relationship between contracts and implementors</param>
        public AssemblyProvider(
            IEnumerable <ICanProvideAssemblies> assemblyProviders,
            IAssemblyFilters assemblyFilters,
            IAssemblyUtility assemblyUtility,
            IAssemblySpecifiers assemblySpecifiers,
            IContractToImplementorsMap contractToImplementorsMap)
        {
            _assemblyProviders         = assemblyProviders;
            _assemblyFilters           = assemblyFilters;
            _assemblyUtility           = assemblyUtility;
            _assemblySpecifiers        = assemblySpecifiers;
            _contractToImplementorsMap = contractToImplementorsMap;

            HookUpAssemblyAddedForProviders();
            Populate();
        }
Exemple #8
0
 /// <inheritdoc/>
 public void Feed(IAssemblies assemblies, IContractToImplementorsMap map)
 {
     _scheduler.PerformForEach(assemblies.GetAll(), assembly =>
     {
         try
         {
             var types = assembly.GetTypes();
             map.Feed(types);
         }
         catch (ReflectionTypeLoadException ex)
         {
             foreach (var loaderException in ex.LoaderExceptions)
             {
                 _logger.Error("TypeFeed failure for assembly {assemblyName} : {loaderExceptionSource} {loaderExceptionMessage}", assembly.FullName, loaderException.Source, loaderException.Message);
             }
         }
     });
 }
 /// <inheritdoc/>
 public void Feed(IAssemblies assemblies, IContractToImplementorsMap map)
 {
     _scheduler.PerformForEach(assemblies.GetAll(), assembly =>
     {
         try
         {
             var types = assembly.GetTypes();
             map.Feed(types);
         }
         catch (ReflectionTypeLoadException ex)
         {
             foreach (var loaderException in ex.LoaderExceptions)
             {
                 _logger.Error($"Failed to load: {loaderException.Source} {loaderException.Message}");
             }
         }
     });
 }
Exemple #10
0
 /// <summary>
 /// Initializes a new instance of <see cref="TypeFinder"/>
 /// </summary>
 /// <param name="contractToImplementorsMap"><see cref="IContractToImplementorsMap"/> for keeping track of the relationship between contracts and implementors</param>
 public TypeFinder(IContractToImplementorsMap contractToImplementorsMap)
 {
     _contractToImplementorsMap = contractToImplementorsMap;
 }
 /// <summary>
 /// Initializes a new instance of <see cref="DefaultBindings"/>
 /// </summary>
 public DefaultBindings(AssembliesConfiguration assembliesConfiguration, IAssemblyProvider assemblyProvider, IContractToImplementorsMap contractToImplentorsMap)
 {
     _assembliesConfiguration = assembliesConfiguration;
     _assemblyProvider        = assemblyProvider;
     _contractToImplentorsMap = contractToImplentorsMap;
 }
Exemple #12
0
 /// <summary>
 /// Configure with a specific <see cref="IContainer"/> and the <see cref="BindingLifecycle">Lifecycle</see> of objects set to none
 /// </summary>
 /// <param name="container"><see cref="IContainer"/> to configure with</param>
 /// <param name="assembliesConfiguration"><see cref="AssembliesConfiguration"/> to use</param>
 /// <param name="assemblyProvider"><see cref="IAssemblyProvider"/> to use for providing assemblies</param>
 /// <param name="contractToImplementorsMap"><see cref="IContractToImplementorsMap"/> for keeping track of the relationship between contracts and implementors</param>
 /// <returns>Configuration object to continue configuration on</returns>
 public static Configure With(IContainer container, AssembliesConfiguration assembliesConfiguration, IAssemblyProvider assemblyProvider, IContractToImplementorsMap contractToImplementorsMap)
 {
     return With(container, BindingLifecycle.Transient, assembliesConfiguration, assemblyProvider, contractToImplementorsMap);
 }
Exemple #13
0
        public IEnumerable <Type> FindMultiple(IContractToImplementorsMap types, Type type)
        {
            var typesFound = types.GetImplementorsFor(type);

            return(typesFound);
        }
Exemple #14
0
 /// <summary>
 /// Configure with a specific <see cref="IContainer"/>
 /// </summary>
 /// <param name="container"><see cref="IContainer"/> to configure with</param>
 /// <param name="defaultObjectLifecycle">Default <see cref="BindingLifecycle"/> for object creation/management</param>
 /// <param name="assembliesConfiguration"><see cref="AssembliesConfiguration"/> to use</param>
 /// <param name="assemblyProvider"><see cref="IAssemblyProvider"/> to use for providing assemblies</param>
 /// <param name="contractToImplementorsMap"><see cref="IContractToImplementorsMap"/> for keeping track of the relationship between contracts and implementors</param>
 /// <returns>Configuration object to continue configuration on</returns>
 public static Configure With(IContainer container, BindingLifecycle defaultObjectLifecycle, AssembliesConfiguration assembliesConfiguration, IAssemblyProvider assemblyProvider, IContractToImplementorsMap contractToImplementorsMap)
 {
     return With(container, defaultObjectLifecycle, new DefaultConventions(container), new DefaultBindings(assembliesConfiguration, assemblyProvider, contractToImplementorsMap), assembliesConfiguration);
 }
Exemple #15
0
        public IEnumerable <Type> FindMultiple <T>(IContractToImplementorsMap types)
        {
            var typesFound = FindMultiple(types, typeof(T));

            return(typesFound);
        }
Exemple #16
0
#pragma warning disable 1591 // Xml Comments
        public Type FindSingle <T>(IContractToImplementorsMap types)
        {
            var type = FindSingle(types, typeof(T));

            return(type);
        }
Exemple #17
0
 /// <summary>
 /// Initializes a new instance of <see cref="DefaultBindings"/>
 /// </summary>
 public DefaultBindings(AssembliesConfiguration assembliesConfiguration, IAssemblyProvider assemblyProvider, IContractToImplementorsMap contractToImplentorsMap)
 {
     _assembliesConfiguration = assembliesConfiguration;
     _assemblyProvider = assemblyProvider;
     _contractToImplentorsMap = contractToImplentorsMap;
 }
Exemple #18
0
 /// <summary>
 /// Configure with a specific <see cref="IContainer"/> and the <see cref="BindingLifecycle">Lifecycle</see> of objects set to none
 /// </summary>
 /// <param name="container"><see cref="IContainer"/> to configure with</param>
 /// <param name="assembliesConfiguration"><see cref="AssembliesConfiguration"/> to use</param>
 /// <param name="assemblyProvider"><see cref="IAssemblyProvider"/> to use for providing assemblies</param>
 /// <param name="contractToImplementorsMap"><see cref="IContractToImplementorsMap"/> for keeping track of the relationship between contracts and implementors</param>
 /// <returns>Configuration object to continue configuration on</returns>
 public static Configure With(IContainer container, AssembliesConfiguration assembliesConfiguration, IAssemblyProvider assemblyProvider, IContractToImplementorsMap contractToImplementorsMap)
 {
     return(With(container, BindingLifecycle.Transient, assembliesConfiguration, assemblyProvider, contractToImplementorsMap));
 }
Exemple #19
0
 /// <summary>
 /// Initializes a new instance of <see cref="AssemblySpecifiers"/>
 /// </summary>
 /// <param name="contractToImplementorsMap"><see cref="IContractToImplementorsMap"/> for keeping track of the relationship between contracts and implementors</param>
 /// <param name="typeFinder"><see cref="ITypeFinder"/> to use for finding types</param>
 /// <param name="assemblyRuleBuilder"><see cref="IAssemblyRuleBuilder"/> used for building the rules for assemblies</param>
 public AssemblySpecifiers(IContractToImplementorsMap contractToImplementorsMap, ITypeFinder typeFinder, IAssemblyRuleBuilder assemblyRuleBuilder)
 {
     _typeFinder = typeFinder;
     _assemblyRuleBuilder = assemblyRuleBuilder;
     _contractToImplementorsMap = contractToImplementorsMap;
 }
 /// <summary>
 /// Initializes a new instance of <see cref="AssemblySpecifiers"/>
 /// </summary>
 /// <param name="contractToImplementorsMap"><see cref="IContractToImplementorsMap"/> for keeping track of the relationship between contracts and implementors</param>
 /// <param name="typeFinder"><see cref="ITypeFinder"/> to use for finding types</param>
 /// <param name="assemblyRuleBuilder"><see cref="IAssemblyRuleBuilder"/> used for building the rules for assemblies</param>
 public AssemblySpecifiers(IContractToImplementorsMap contractToImplementorsMap, ITypeFinder typeFinder, IAssemblyRuleBuilder assemblyRuleBuilder)
 {
     _typeFinder                = typeFinder;
     _assemblyRuleBuilder       = assemblyRuleBuilder;
     _contractToImplementorsMap = contractToImplementorsMap;
 }