@AceLightning
I fell in programming.

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

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

Существует программа, в которой должен создаваться экземпляр класса Table, который реализует интерфейс ITable из динамически подключенной DLL. Вопрос в том, как это все реализовать?
  • Вопрос задан
  • 250 просмотров
Решения вопроса 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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы