/// <summary> /// Searches the loader for an <see cref="IAssemblyTargetLoader{T}"/> /// instance and uses its derived classes to initialize /// the assembly target loader. /// </summary> /// <param name="source">The <see cref="ILoader{TTarget}"/> instance that will hold the plugin.</param> public void Initialize(ILoader <TTarget> source) { // Use an existing AssemblyContainerLoader // instance, if possible IAssemblyTargetLoader <TTarget> assemblyLoader = null; List <IAssemblyTargetLoader <TTarget> > matches = (from currentInstance in source.FileLoaders where currentInstance != null && currentInstance is IAssemblyTargetLoader <TTarget> select(IAssemblyTargetLoader <TTarget>) currentInstance).ToList(); if (matches.Count > 0) { assemblyLoader = matches[0]; } // If no matches were found, // create the assembly target loader if (matches.Count == 0) { var loader = new AssemblyTargetLoader <TTarget>(); source.FileLoaders.Add(loader); assemblyLoader = loader; } if (assemblyLoader == null) { return; } Initialize(source, assemblyLoader); }
/// <summary> /// Initializes the <paramref name="loader"/> instance /// with the given <paramref name="assemblyLoader"/> instance. /// </summary> /// <param name="loader">The loader being configured.</param> /// <param name="assemblyLoader">The assembly loader that will load the types into the loader itself.</param> protected abstract void Initialize(ILoader <TTarget> loader, IAssemblyTargetLoader <TTarget, TAssembly, TType> assemblyLoader);
/// <summary> /// Initializes a new instance of the <see cref="BaseTargetLoaderPlugin{TTarget,TAssembly,TType}"/> class. /// </summary> /// <param name="typeExtractor">The type extractor that will pull the types out of the current assembly.</param> /// <param name="assemblyLoader">The assembly loader that will load the current assembly into memory.</param> protected BaseTargetLoaderPlugin(ITypeExtractor <TAssembly, TType> typeExtractor, IAssemblyTargetLoader <TTarget, TAssembly, TType> assemblyLoader) { _typeExtractor = typeExtractor; _assemblyLoader = assemblyLoader; }