매우 흥미로운 상황 이니 반사, 상속 및 제네릭을 둘러싼 웹에서 구체적인 내용을 찾을 수 없습니다.추상 클래스로 엔티티 프레임 워크 사용
로 시작하려면 내가 가진
기본 추상적이라고 분류 :
public abstract class ItemBase
{
// default properties
}
ItemBase는 될 항목라는 추상적 인 실체 내 슈퍼 클래스 :
public abstract class Item
{
// some extra properties
}
이 배경의 아이디어는 추가 속성이 설정된 Item에서 상속받을 엔터티를 만드는 것입니다.
public partial class City : Item {}
이제 테스트 메소드에서 전달 된 엔티티에 대해 메소드를 호출하고 메소드에서 리턴 한 모든 데이터를 반환하려고합니다.
List<Item> cities = this.InvokeGenericMethod<Item>("State", "GetAllMajorCities", args);
: 나는 모든 도시를 얻을 수있는 시험이있을 수 있습니다 내 스텁에서
public List<City> GetAllMajorCities() {}
:
테스트를 위해 우리는 모든 주요 도시의 컬렉션을 반환 주에서 방법을 가지고, 가정
그런 다음 InvokeGenericMethod (문자열, 문자열, 객체 []에 args)을 보이는 뭔가 같은 :
public IEnumerable<T> InvokeGenericMethod<Item>(string className, string methodName, object[] args)
{
Type classType = className.GetType(); // to get the class to create an instance of
object classObj = Activator.CreateInstance(classType);
object ret = classType.InvokeMember(methodName, BindingFlags.InvokeMethod, null, classObj, args);
}
주어진 예제에서 이론적으로 "ret"값은 IEnumerable 유형이어야합니다. 그러나 ret 값을 다음과 같이 점검하면 반환 유형이 investivage에 추가 될 경우 List를 반환합니다.
if (ret is IEnumerable<T>)
수표를 무시합니다.
내가 뭔가를 상속을 준수 나를 IEnumberable에 캐스팅 할 수 있도록 보인다
public List<City> GetAllMajorCities() {}
public List<ItemBase> GetAllMajorCities() {}
에 변경하는 경우.
나는 완전히 여기저기서 혼란 스럽다.
모든 아이디어, 권장 사항을 크게 높이 평가하겠습니다.
감사합니다,
에릭
는
코드를 다시 확인해 주시겠습니까? 나는 여러 가지가 섞여 있다고 생각한다. InvokeGenericMethod가 작동하지 않을 것입니다. className.GetType()은 항상 유형 문자열을 반환합니다 (예 :). – Achim
안녕하세요 아킴입니다. 위의 코드는 다소 혼란스러운 경우 실제 사과에 대한 예입니다. 클래스의 전체 이름에 리플렉션을 사용합니다. 드롭 다운 목록을 바인딩 할 때 문자열 형식의 클래스의 네임 스페이스를 사용합니다. 그런 다음이 문자열이 내 InvokeGenericMethod에 전달됩니다. – JadedEric