MEF 프레임워크 학습 여행 (9) 위젯 생명주기 및 조립 알림

4759 단어 라이프 사이클
부품은 조합 컨테이너에 로드되므로 일반 객체보다 주기가 더 복잡할 수 있습니다.부품은 두 개의 중요한 생명주기 관련 인터페이스를 실현할 수 있습니다: IDisposable과 IPartImportsSatisfiedNotification.
닫을 때 작업을 수행해야 하는 부품과 자원을 방출해야 하는 부품은 평상시와 같아야 한다.NET Framework 객체는 IDisposable을 구현합니다.그러나 용기는 위젯에 대한 인용을 만들고 유지하기 때문에 위젯을 가진 용기만 디스패치 방법을 호출해야 합니다.컨테이너 자체는 IDisposable을 실현하고 디스패치의 일부분으로 모든 위젯을 디스패치로 호출합니다.따라서 컨테이너와 그 어떠한 부품도 더 이상 조합할 필요가 없을 때, 컨테이너를 항상 놓아야 합니다.
생존 기간이 긴 조합 용기에 대해 '비공유' 정책을 만드는 위젯의 메모리 소모가 문제가 될 수 있습니다.이러한 비공유 부품은 여러 번 작성할 수 있으며 컨테이너 자체가 해제될 때까지 해제되지 않습니다.이러한 상황에 대응하기 위해 용기는 ReleaseExport 방법을 제공했다.비공유 내보내기에서 이 방법을 호출하면, 조합 용기에서 내보내기를 제거하고 방출합니다.제거된 내보내기에만 사용된 부품 및 트리의 심층 부품도 제거되어 해제됩니다.이런 방식을 통해 조합 창 자체를 방출하지 않아도 자원을 회수할 수 있다.
IPartImportsSatisfiedNotification에는 OnImportsSatisfied라는 방법이 포함되어 있습니다.조합이 완료되고 위젯의 가져오기가 가능할 때, 조합 창은 인터페이스를 실현하는 모든 위젯에 이 방법을 호출합니다.위젯은 조합 엔진으로 만들어져 다른 위젯의 가져오는 데 사용됩니다.위젯의 가져오기를 설정하기 전에 위젯 구조 함수에 의존하는 가져오기 값을 실행하거나 이 값을 초기화할 수 없습니다. ImportingConstructor 특성을 사용하여 이 값을 필수로 지정하지 않으면.이 방법은 일반적으로 최선의 방법이지만, 어떤 경우에는 구조 함수 주입을 사용할 수 없을 수도 있다.이러한 경우 OnImportsSatisfied에서 초기화를 실행할 수 있으며 위젯은 IPartImportsSatisfiedNotification을 실현해야 합니다.
위젯 조립 알림, 어떤 구성 요소가 인용한 위젯이 가져오기를 충족시킬 수 있을 때, 이미 조립된 구성 요소를 되돌려 주기 전에 이 구성 요소를 알립니다.
어떤 경우 MEF가 당신의 클래스 실례를 가져오는 과정을 완성할 때, 당신의 클래스가 당신에게 매우 중요하다는 것을 알립니다.만약 이렇다면 프로젝트는 [System.ComponentModel.Composition.IPartImportsSatisfiedNotification] 인터페이스를 실현해야 한다.이 인터페이스는 단지 하나의 단독 방법만 있습니다: OnImports Satisfied. 모든 가져오기가 만족하고 만족할 때 호출됩니다.
간단한 예:
코드 세그먼트
class Program

{

        private static CompositionContainer container;

        static void Main(string[] args)

        {

            var catalog = new AssemblyCatalog(typeof(Program).Assembly);

            container = new CompositionContainer(catalog);

            var studentManager = container.GetExportedValue<MyComponent>();



            Console.ReadLine();

        }

}





    [Export]

    class MyComponent : IPartImportsSatisfiedNotification

    {

        public void OnImportsSatisfied()

        {

            Console.WriteLine("OK!~");

        }

    }



 

[MyComponent]는 조립 조건을 충족시켰기 때문에 이 통지는 반드시 집행될 수 있습니다.
관련 보기:
MEF 프레임워크 학습 여행(11) 디버깅
MEF 프레임워크 학습 여행 (10) 재구성
MEF 프레임워크 학습 여행 (9) 위젯 생명주기 및 조립 알림
MEF 프레임워크 학습 여행(8) 발견 피하기
MEF 프레임워크 학습(7) 부품 작성 규칙(정책)
MEF 프레임워크 학습 여행 (6) 메타데이터와 메타데이터 보기
MEF 프레임워크 학습 여행 (5) 가져오기 내보내기 (아래)
MEF 프레임워크 학습 여행 (4) 가져오기 내보내기 (위)
MEF 프레임워크 학습 여행(3) 조합
MEF 프레임워크 학습 여행 (二) 계약
MEF 프레임워크 학습 여행 (1) 개념

좋은 웹페이지 즐겨찾기