Microsoft MVP성태의 닷넷 이야기
Lazy<T> 의 지연객체 생성 전에 실 객체의 Attribute분석 [링크 복사], [링크+제목 복사],
조회: 10046
글쓴 사람
박성준 (firesprite at empa.com)
홈페이지
첨부 파일

안녕하십니까.
제목처럼 MEF 를 통한 지연객체의 실객체 정보를 로딩전에 분석하고 싶은데 해당
객체의 분석이 어렵워서 질문드립니다.
코드 샘플은 MEF의 샘플인 SimpleCalculater를 제가 좀 수정해서 업로드했습니다.

질문 내용은 해당 코드 85라인에 기술했습니다.

foreach (Lazy<IOperation, IOperationData> i in operations)
{
   if (i.Metadata.Symbol.Equals(operation))
   {
        //질문 i 는 Lazy<IOperation> 타입입니다.
        // i.Value를 하게되면 지연객체가 생성되는데
        // i.Value를 호출하지 않은 상태에서 즉 실제 객체를 생성하지 않은 상태에서
        // class Mod 의 [DisplayName("계산")] 어트리뷰트를 알고 싶습니다.
        // 방법이 있을까요?
        return i.Value.Operate(left, right).ToString();
    }
}

-------------------------------------------------
[Export(typeof(SimpleCalculator3.IOperation))]
[ExportMetadata("Symbol", '%')]
public class Mod : SimpleCalculator3.IOperation
{
    [DisplayName("계산")]
    public int Operate(int left, int right)
    {
        return left % right;
    }
}

-----------------------------------------
CompositionContainer 객체에서 해당 원 객체의 실마리를 찾을 수 있을까 했는데 거기서도
해당 타입객체를 얻기는 힘들더군요.

부디 좀 알려주세요.








[최초 등록일: ]
[최종 수정일: 2/24/2012]


비밀번호

댓글 작성자
 



2012-02-24 05시56분
Lazy의 Generic 인자에 지정된 타입 자체가 concrete 클래스가 아닌, 인터페이스를 구현한 것이므로 사실 이런 경우는 알 방법이 없습니다.

겨우 알 수 있는 방법이라면 i.GetType().FullName 을 조회하면 "System.Lazy`2[[SimpleCalculator3.IOperation, ...]" 정보를 얻을 수 있습니다. 따라서 현재 로드된 어셈블리에서 SimpleCalculator3.IOperation 인터페이스를 구현하고 있는 타입을 찾은 후 그 타입에 대해 reflection 으로 DisplayName 을 구해올 수 있습니다.
정성태
2012-02-27 10시37분
[박성준] 빠른 답변 감사합니다.
[guest]

1  [2]  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5910guest4/24/20233490Async 메서드와 try~catch [1]
5909guest4/22/20233928Visual Studio 구매 시(1인 개발자) [4]
5908guest4/22/20233736텅빈 원그리기 [5]
5907민성4/21/20233362안녕하세요 서버 백업 문제에 대해서 [2]
5906guest4/21/20233495Dispatcher 서비스 구현 질문 [1]
5905guest4/20/20233846tabControl의 tabPage가 여러 개일 때 순서를 바꾸기가 까다롭네요 [5]
5904guest4/18/20233799[신규자료첨부] DLL 'SQLite.Interop.dll'을 찾을 수 없습니다 [4]파일 다운로드1
5903guest4/18/20233189fileSystemWatcher 이벤트 관련 질문입니다 [2]
5902guest4/17/20233866c#으로 USB 관련 질문 [2]
5901guest4/17/20233394내솔루션 판매 시 1.0.0.0 폴더와 Sqlite 배포 [5]
5900guest4/17/20234621DLL 'SQLite.Interop.dll'을 찾을 수 없습니다 [2]파일 다운로드1
5899guest4/17/20233503Dictionary와 Linq [4]
5898차가워4/17/20233385CNTK 교육 문의 [1]
5897guest4/17/20233278Socket스레드와 UI thread [4]
5896HAN4/16/20233289c언어 return 에 대해 궁금한게 있어요. [1]파일 다운로드1
5895guest4/15/20233031Drag and Drop - 모든 컨트롤 [2]
5894송부장4/14/20234466[질문] Visual Studio 2022에서 '도구 상자 항목 선택'의 'COM 구성 요소' 탭에서 ActiveX 목록이 보이지 않습니다. [3]파일 다운로드2
5893감사합니...4/14/20233015오라클 OLEDB방식 접속 후 SELECT 'TEST' TEST_VALUE FROM DUAL의 값이 이상합니다. [1]
5892한무4/14/20233217C# 으로 백그라운드에서 워드를 실행하여 매크로 실행이 가능 할까요? [2]
5891리세4/14/20233107안녕하세요.C# 서버프로그램에서의 Mysql 쿼리문제(다중쿼리 실행)에 대해 문의드립니다. [2]
5890guest4/14/20233753C# 프리랜서로 돈 벌려면 성태님 책 마스터하면 되나요? [6]
5889전예찬4/14/20232934C# 파일 복사 관련 질문 드립니다. [3]
5888정경구4/12/20233221C# 첫 환경 세팅과 관련해서 [4]
5887HAN4/12/20232843안녕하세요 파이썬도 공유 가능 할까요? [1]
5886guest4/11/20233234필요한 어셈블리만 다운로드 및 재로딩하는 방법에 관하여 [2]
5885guest4/11/20233073c#으로 드림위버같은 거 만들어볼려는데요 [6]
1  [2]  3  4  5  6  7  8  9  10  11  12  13  14  15  ...