2011-09-22 1 views
2

기본적으로 ImportAttribute은 정확히 한 부분이 속성에 지정된 계약을 충족해야합니다. 이 동작은 ImportAttribute.AllowDefault 속성을 사용하여 수정할 수 있습니다. 본질적으로 이는 0 개 또는 1 개의 파트가 계약을 만족할 수 있도록 동작을 변경합니다. 부품이 없으면 해당 가져 오기의 기본값이 대신 사용됩니다.ImportMany 속성을 사용할 때 적어도 하나의 부품을 가져 오도록 요구하려면 어떻게해야합니까?

ImportManyAttribute은 0 개 이상의 부품이 계약을 체결 할 수 있도록합니다. MEF는 빈 콜렉션, 싱글 톤 콜렉션 또는 찾은 것에 따라 파트 세트를 사용하여이 가져 오기를 만족시킵니다.

MEF에게 빈 콜렉션이 유효하지 않다고 어떻게 말합니까?

내가해야 :

  1. IPartImportsSatisfiedNotification를 구현하고 컬렉션이 비어있는 경우 OnImportsSatisfied에서 예외를 던져?
  2. 내 구현 ImportOneOrMoreAttribute을 구현 하시겠습니까?
  3. 어떻게 든 놓치고있는 MEF의 기능을 사용하십시오.

답변

4

MEF는 기본적으로 ZeroOrOne, ExactlyOne 또는 ZeroOrMore의 세 가지 카디널리티 만 인식합니다. ImportCardinality을 참조하십시오. 따라서 MEF 속성의 제약 내에서 직접 표현할 수는 없습니다. OnImportsSatisfied에서 예외를 던지기를 권장하지 않습니다. 왜냐하면 다른 예측할 수없는 문제가 발생할 가능성이 높기 때문입니다.

내가 할 수있는 최선의 방법은 ImportMany이며 이러한 가져 오기를 사용할 때의 컨텍스트에서 확인하는 것입니다.

+1

저는 마지 못해 현실을 받아들입니다. ( –

+0

이것은 우울증입니다. 희망적으로 그들은 미래에 OneOrMore를 추가합니다. – Contango

관련 문제