Exemplo n.º 1
0
    /// <summary>
    ///   из файла конфигурации.
    ///  Выполнено с учетом нескольких команд в файла конфигурации.
    /// </summary>
    /// <returns>Результат разбора</returns>
    public static Assembly LoadPlugin(string relativePath)
    {
        Assembly rc = null;
        // Navigate up to the solution root
        string root = Path.GetFullPath(Path.Combine(
                                           Path.GetDirectoryName(
                                               Path.GetDirectoryName(
                                                   Path.GetDirectoryName(
                                                       Path.GetDirectoryName(
                                                           Path.GetDirectoryName(typeof(CommandLineSample).Assembly.Location)))))));

        string pluginLocation = Path.GetFullPath(Path.Combine(root,
                                                              relativePath.Replace('\\', Path.DirectorySeparatorChar)));

        if (!string.IsNullOrEmpty(pluginLocation))
        {
            // Loading commands from:
            CMDPluginLoadContext loadContext = CMDPluginLoadContext.CreateInstance(pluginLocation);
            AssemblyName         an          = new AssemblyName(
                Path.GetFileNameWithoutExtension(pluginLocation));

            if (an != null && loadContext != null)             //
            {
                rc = loadContext.LoadFromAssemblyName(an);
            }
        }
        return(rc);
    }
Exemplo n.º 2
0
    /// <summary>
    /// Выбираем объект или создаем объект если нет подходящего
    /// </summary>
    /// <param name="pluginPath">библиотека с именем и путем</param>
    /// <returns></returns>
    static public CMDPluginLoadContext CreateInstance(string pluginPath)     //
    {
        CMDPluginLoadContext rc = ListPluginLoadContext.FirstOrDefault(
            (pn => pn._pluginPath == pluginPath));

        if (rc == null)                          //
        {                                        // нет с таким путем
            rc = new CMDPluginLoadContext(pluginPath);
            if (rc.IsAssemblyDependencyResolver) // создали  нормально
            {
                ListPluginLoadContext.Add(rc);
            }
            else     // создали не нормально
            {
                rc = null;
            }
        }
        return(rc);
    }
Exemplo n.º 3
0
 /// <summary>
 /// Сравнить  на равенство
 /// </summary>
 /// <param name="other">величина для сравнения</param>
 /// <returns>результат сравнения</returns>
 public bool Equals(CMDPluginLoadContext other)
 {
     return(this._resolver.Equals(other._resolver));
 }