Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
 /// <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);
Ejemplo n.º 3
0
 /// <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;
 }