나는 다음과 같은 코드를 사용하여, 그것에서 기본 클래스의 정적 메서드를 동적으로 클래스를 파생있어 다른 어셈블리에서 호출하려고 해요 :다른 어셈블리에 파생 클래스에서 기본 클래스 메서드를 실행하여 동적으로
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()를' "개체 참조가 개체의 인스턴스로 설정되지 않았습니다"수 오류.
이것도 가능합니까?
업데이트 : 그것은 마치 마법처럼 일했다 크리프로 표시된 바와 같이 BindingFlags.FlattenHierarchy을 추가함으로써
. 작업 코드는 다음과 같습니다.
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이 대답을하고 해결책으로 골랐다면? 이것은 나의 첫 번째 게시물이다. 나는 크리프에게 최대한 예의 바르고 미래의 두통을 많이 남기고 싶다 ... –
나의 나쁜 - 나는 크립의 답이 본질적으로 해결책이라는 것을 깨닫지 못했다. 코드베이스). 그래서, 나는 해결책으로 그의 대답을 선택하는 것이 좋습니다. –