2012-06-19 2 views
1

좋아, 그래서 면도기 유형 속성 포인터가 주어진 알 수없는 데이터 클래스에서 데이터를 읽을 수있는 제네릭 메서드를 갖고 싶습니다.unknow 데이터 모델에서 데이터 가져 오기

I.E. 템플릿과 객체가 포함 된 문자열을 전달한 다음 템플릿의 문자열이 지정된 객체에서 데이터를 추출 할 수 있기를 원합니다.

String template = "@Model.Basket"; 
var results = parse(template, data); 

구문 분석 방법은 특정 모델에 대한 지식이 없어야가 전달되고, 그래서 그 방법 서명은 뭔가를해야한다 : 데이터가

public var parse(String template, object model) 

public class Receipt 
{ 
    public String Firstname { get; set; } 
    public String Surname { get; set; } 
    public DateTime TransactionDateTime { get; set; } 
    public Boolean ReturnCustomer { get; set; } 
    public LineItem[] Basket { get; set; } 


    public class LineItem 
    { 
     public Product product { get; set; } 
     public int Units { get; set; } 

     public class Product 
     { 
      public int ProductId { get; set; } 
      public String ProductName { get; set; } 
      public double Cost { get; set; } 
     } 
    } 
} 
같은

이 경우 parse는 라인 항목의 배열을 반환해야하지만 템플릿이 "@ Model.Firstname"과 동일한 경우 해당 템플릿에 저장된 이름이 포함 된 문자열을 반환해야합니다 로퍼 티.

누구에게 좋은 아이디어가 있습니까?

이 솔루션의 경우 면도기 엔진이 이해할 수있는 형식이 아닌 템플릿이 있으므로 면도기 엔진을 사용할 수 없습니다.

답변

0

이렇게하려면 System.Reflection 네임 스페이스, 특히 PropertyInfo를보고 싶습니다. 그래도 인 것이 확실하지 않습니다.

+0

나는 반사가 유일한 방법일지도 모른다고 생각하고 있었다. 왜 그것이 좋은 생각이 아니라고 생각합니까? – Gineer

+0

문제 도메인을 알지 못해서 좋은 생각이 아닌 것은 확신 할 수 없지만, 복잡한 도메인이 될 가능성이있는 것으로 보입니다. 아마도 T4 템플릿을 조사하면 관리가 더 용이해질 수 있습니다. – podiluska

+0

T4 템플릿을 살펴본 결과 VS에서 템플릿을 만들 때 파일 뒤에 cs 코드가 실제로 생성되므로 템플릿이 VS에서 미리 코드화되기 때문에 작동하지 않습니다. 내 프로젝트에서 사용자는 런타임에 해석하고 채우기를 원하는 모든 응용 프로그램에서 템플릿을 생성 할 수 있어야합니다. – Gineer