/// <summary> /// Construtor padrão. /// </summary> /// <param name="assemblies"></param> /// <param name="partDescriptions"></param> public DefinitionCatalog(IAssemblyContainer assemblies, IEnumerable <PartDescription> partDescriptions) { assemblies.Require("assemblies").NotNull(); partDescriptions.Require("partDescriptions").NotNull(); _assemblies = assemblies; _partDescriptions = partDescriptions; }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="partDescription"></param> /// <param name="assemblyContainer"></param> public ProviderParameterImportDefinitionContainer(PartDescription partDescription, IAssemblyContainer assemblyContainer) { partDescription.Require("partDescription"); assemblyContainer.Require("assemblyContainer"); _partDescription = partDescription; _assemblyContainer = assemblyContainer; }
/// <summary> /// Recupera o tipo associado com a instancia. /// </summary> /// <param name="assemblyContainer"></param> /// <returns></returns> private Type GetType(IAssemblyContainer assemblyContainer) { if (_type == null) { System.Reflection.Assembly assembly = null; if (assemblyContainer.TryGet(_typeName.AssemblyName.Name, out assembly)) { _type = assembly.GetType(_typeName.FullName, true); } else { throw new InvalidOperationException(string.Format("Assembly '{0}' not found", _typeName.AssemblyName.Name)); } } return(_type); }
/// <summary> /// Recupera os parametros. /// </summary> /// <param name="assemblyContainer"></param> /// <returns></returns> private ImportingConstructorParameterDescription[] GetParameters(IAssemblyContainer assemblyContainer) { if (_parameters == null || _parameters.Length == 0) { var type = GetType(assemblyContainer); var constructors = type.GetConstructors(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); foreach (var ctor in constructors) { var ctorParameters = ctor.GetParameters(); if (ctorParameters.Length > 0) { _parameters = ctorParameters.Select(f => new ImportingConstructorParameterDescription { Name = f.Name, ContractType = f.ParameterType }).ToArray(); continue; } } } return(_parameters); }
/// <summary> /// Recupera a instancia do construtor associado. /// </summary> /// <param name="assemblyContainer"></param> /// <returns></returns> public System.Reflection.ConstructorInfo GetConstructor(IAssemblyContainer assemblyContainer) { var type = GetType(assemblyContainer); var constructors = type.GetConstructors(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var parameters = GetParameters(assemblyContainer) ?? new ImportingConstructorParameterDescription[0]; foreach (var i in constructors) { var ctorParameters = i.GetParameters(); if (ctorParameters.Length == parameters.Length) { var equals = true; for (var j = 0; equals && j < ctorParameters.Length; j++) { equals = ctorParameters[j].Name == parameters[j].Name && (parameters[j].ContractType == null || (parameters[j].ContractType == ctorParameters[j].ParameterType)); } if (equals) { return(i); } } } return(null); }
/// <summary> /// Recupera os parametros do construtor. /// </summary> /// <param name="assemblyContainer"></param> /// <returns></returns> public IEnumerable <Tuple <ImportingConstructorParameterDescription, System.Reflection.ParameterInfo> > GetParameterImportDefinitions(IAssemblyContainer assemblyContainer) { var constructor = GetConstructor(assemblyContainer); if (constructor != null) { var parameters = GetParameters(assemblyContainer); var ctorParameters = constructor.GetParameters(); for (var i = 0; i < ctorParameters.Length; i++) { yield return(new Tuple <ImportingConstructorParameterDescription, System.Reflection.ParameterInfo>(parameters[i], ctorParameters[i])); } } }
/// <summary> /// Initializes a new instance of the <see cref="BaseBusinessRuleRegistry"/> class. /// </summary> /// <param name="serviceProvider">The service provider used to get dependencies.</param> /// <param name="assemblyContainer">The container of all executing assemblies.</param> public BaseBusinessRuleRegistry(IServiceProvider serviceProvider, IAssemblyContainer assemblyContainer) { this.serviceProvider = serviceProvider; this.assemblyContainer = assemblyContainer; this.RegisterEntries(); }