У меня есть dll, которая содержит ряд классов, которые все наследуют от класса CommandBase. Я пытаюсь получить экземпляры всех этих классов (CommandA, CommandB, CommandC и т.д.), Используя отражение в С#, чтобы я мог вызвать конкретный метод для каждого из них. Вот что я до сих пор:
//get assemblies in directory.
string folder = Path.Combine(HttpContext.Current.Server.MapPath("~/"), "bin");
var files = Directory.GetFiles(folder, "*.dll");
//load each assembly.
foreach (string file in files)
{
var assembly = Assembly.LoadFile(file);
if (assembly.FullName == "MyCommandProject")
{
foreach (var type in assembly.GetTypes())
{
if (!type.IsClass || type.IsNotPublic) continue;
if(type is CommandBase)
{
var command = Activator.CreateInstance(type) as CommandBase;
}
}
}
}
У меня две проблемы. Первая проблема заключается в том, что строка "if (type is CommandBase" ) дает следующее предупреждение:
Данное выражение никогда не относится к предоставленному типу CommandBase.
Вторая проблема заключается в том, что я не могу понять, как получить экземпляр фактического объекта (CommandA, CommandB и т.д.), просто преобразовать его в CommandBase недостаточно.