Задать вопрос
@AceLightning
I fell in programming.

Как создать экземпляр класса из динамически подключенной DLL?

Существует DLL, в которой есть класс Table, реализующий интерфейс ITable.

Существует программа, в которой должен создаваться экземпляр класса Table, который реализует интерфейс ITable из динамически подключенной DLL. Вопрос в том, как это все реализовать?
  • Вопрос задан
  • 286 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • OTUS
    C# Developer. Professional
    6 месяцев
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 1
    1 неделя
    Далее
  • Software-testing.ru
    Программирование на C# для тестировщиков
    10 недель
    Далее
Решения вопроса 1
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
var assembly = Assembly.LoadFrom("c:\plugins\table.dll");
var type = assembly.GetType("MyNamespace.Table");
var instance = (ITable) Activator.CreateInstance(type);


P.S. Пример полного работающего решения:
Common.dll / IPlugin.cs
namespace Common
{
    public interface IPlugin
    {
        string GetName();
    }
}
Plugin.dll / Plugin.cs
using Common;

namespace Plugin
{
    public sealed class Plugin : IPlugin
    {
        public string GetName()
        {
            return "Cool Plugin!";
        }
    }
}
PluginsTest.exe / Program.cs
using Common;
using System;
using System.Diagnostics;
using System.Linq;
using System.Reflection;

namespace PluginsTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var plugin = LoadPlugin("..\\..\\..\\Plugin\\bin\\Debug\\Plugin.dll");
            var name = plugin.GetName();
            Debug.WriteLine("Plugin loaded: " + name);
        }

        static IPlugin LoadPlugin(string path)
        {
            var type = Assembly
                .LoadFrom(path)
                .GetTypes()
                .First(typeof(IPlugin).IsAssignableFrom);

            return (IPlugin)Activator.CreateInstance(type);
        }
    }
}

Зависимости:
Plugin.dll → Common.dll
PluginsTest.exe → Common.dll
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы