parte importação com meta dados específicos usando MEF prévia cinco

votos
3

Eu tenho uma exportação definido como o seguinte no MEF visualização 5

[ExportMetadata(Application, CheckFolderApplication)]
[Export(typeof(ExtendedArtifactBase))]
public class CheckFolderArtifact2 : ExtendedArtifactBase
{ ...

Então eu única quer essas importações com o Application CheckFolderApplication metadados. Para currenly fazer que eu li todas as importações e, em seguida, filtrar o resultado.

[Import(typeof(ExtendedApplicationBase))]
private ExportCollection<IApplication> _applications { get; set; }

public IApplication GetApplication(string applicationName)
{
    return _applications.Single(a => a.GetExportedObject().Name == applicationName).GetExportedObject();
 }

Este se sente muito ineficiente. E se eu tiver milhares de plug-ins - eu tenho que ler todos eles via MEF, é só pegar um com os metadados certo? Se assim como você armazenar em cache o resultado?

Publicado 19/05/2009 em 18:35
fonte usuário
Em outras línguas...                            


2 respostas

votos
3

Sim, neste caso você terá que fazer o mesmo filtragem.

Para armazenar em cache o resultado, você pode simplesmente armazená-lo em uma outra variável privada. Se você quiser apoiar recomposição (você teria que definir a propriedade AllowRecomposition do atributo de importação para true), então você pode implementar IPartImportsSatisfiedNotification em sua classe e método OnImportsSatisfied da interface será chamado sempre que as importações tenham sido definidas.

Respondeu 19/05/2009 em 21:59
fonte usuário

votos
0

Eu encontrei-me querer fazer algo semelhante. Eu finalmente importado preguiçoso e filtragem nos metadados, como esperamos que uma maneira de evitar instanciar os objetos reais antes do tempo.

[ImportMany(typeof(MyInterface))]
List<Lazy<MyInterface,MyMetadataType>> MyGuys { get; set; }

(E com forte metadados digitado - Eu também usou o recurso onde você pode criar um MyMetadataType de interface com somente leitura recebe, e passar essa vez de definir TMetadata = IDictionary)

Imagino MEF ainda tem que ler pelo menos os metadados de todos os 'milhares de plugins' embora ...

Respondeu 28/04/2010 em 21:34
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more