Я отредактировал ваш вопрос, потому что он слишком длинный и многословный (3000 символов).
Ответ на вопрос 1
Чтобы динамически загружать DLL, посмотрите этот ответ. Он использует отражение для перебора каждого типа в сборке и использует Activator.CreateInstance()
для создания экземпляров классов.
Для вашей системы плагинов я бы создал что-то вроде:
В вашем .exe:
public interface IPlugin
{
void DoSomething();
}
public class A : IPlugin
{
public virtual void DoSomething() {}
}
public class B : IPlugin
{
public virtual void DoSomething() {}
}
public class C : IPlugin
{
public virtual void DoSomething() {}
}
public class D : IPlugin
{
public virtual void DoSomething() {}
}
В библиотеке DLL:
public class NewA : A
{
public override void DoSomething() { base.DoSomething() }
}
public class NewB : B
{
public override void DoSomething() { base.DoSomething() }
}
public class NewC : C
{
public override void DoSomething() { base.DoSomething() }
}
public class NewD : D
{
public override void DoSomething() { base.DoSomething() }
}
В своем клиентском коде код против IPlugin
. Ваш клиентский код не знает о конкретных классах A
, B
, C
, D
.
Загрузите нужные классы из имеющихся у вас DLL и вставьте их в IPlugin
Ответ на вопрос 2
У вас могут быть классы с одним и тем же именем класса, если они находятся в разных пространствах имен, вы не можете иметь классы с одним и тем же именем в одном и том же пространстве имен. В вашем случае они должны быть в разных пространствах имен, так что все в порядке.
person
Sam Leach
schedule
03.04.2014