Я пытаюсь звонить из другой сборки базового класса статический метод от его производного класса динамически, используя следующий код:Выполнить метод базового класса из производного класса на другую сборку динамически
Assembly executingAssembly = Assembly.GetExecutingAssembly();
Assembly objectAssembly =
Assembly.Load(executingAssembly.GetReferencedAssemblies().
Where(a => a.Name == "WebDelightBLL").FirstOrDefault());
Type myType = objectAssembly.GetType("WebDelightBLL.Ingredient");
MethodInfo myMethod = myType.GetMethod("GetAll", BindingFlags.Public | BindingFlags.Static);
object myInstance = Activator.CreateInstance(myType);
dgvResultsRES.DataSource = myMethod.Invoke(myInstance, null);
кода в Библиотеки DLL следующим образом:
public class BaseClass<DerivedClass>
{
public static Type MyType()
{
return typeof(DerivedClass);
}
public static string Prefix()
{
return "Sp" + MyType().Name;
}
public static DataTable GetAll()
{
try
{
DataTable dt = GetSP(Connection.connectionString(),
Prefix() + "GetAll", 5);
return dt;
}
catch (Exception)
{
throw;
}
}
}
public class Ingredient : BaseClass<Ingredient>
{
public string SayHello()
{
return "Hello, World!"; //Just to exemplify a point
}
}
Но я всегда получаю «ссылка на объект не указывает на экземпляр объекта»
Если я пытаюсь вызвать «SayHello()», например, я получаю нет ошибка.
Возможно ли это?
Update:
Добавляя BindingFlags.FlattenHierarchy, как указано Creep он работал как шарм. Рабочий код выглядит следующим образом:
Type myType = objectAssembly.GetType("WebDelightBLL.Ingredient");
MethodInfo myMethod = myType.GetMethod("GetAll", BindingFlags.Public
| BindingFlags.Static | BindingFlags.FlattenHierarchy);
//object myInstance = Activator.CreateInstance(myType); <-- not needed.
dgvResultsRES.DataSource = myMethod.Invoke(null, null);
Вы можете создать ответ на свой вопрос, и выберите это в качестве решения :) –
не было бы справедливее если @Creep сделал ответ, и я выбрал его как решение? Это мой первый пост. Я бы хотел быть как можно более вежлив с Creep, сэкономил много будущих головных болей ... –
Мой плохой - я не понимал, что ответ Крипа по сути является решением (с небольшими корректировками в вашем фактическом база кода). Итак, да, я предлагаю выбрать его ответ в качестве решения. –