У меня есть DLL, которая содержит ряд классов, которые все наследуются от класса CommandBase. Я пытаюсь получить экземпляры всех этих классов (CommandA, CommandB, CommandC и т. Д.), Используя отражение в C #, чтобы я мог вызывать определенный метод для каждого из них. Вот что у меня есть:
//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;
}
}
}
}
У меня 2 проблемы. Первая проблема заключается в том, что строка «if (type is CommandBase») выдает следующее предупреждение:
Данное выражение никогда не относится к указанному типу CommandBase.
Вторая проблема заключается в том, что я не могу понять, как получить экземпляр реального объекта (CommandA, CommandB и т. Д.), Просто преобразования его в CommandBase недостаточно.