MEF = pode sentir frustração?

ATUALIZAR

Como eu tentei fazer o MEF funcionar em todo o meu aplicativo, estou encontrando mais lugares onde simplesmente não entendo por que ela não está criando automaticamente minha biblioteca quando eu esperava. Eu acho que tudo volta ao que Reed estava dizendo sobre precisar do MEF para criar tudo. Então, agora, eu tenho uma classe de leitor XML que precisa usar meu CandySettings, mas mesmo que sua propriedade ICandySettings possua o atributo [Import], ela não é importada. Primeiro, descobri que [Import] não funciona em estática, então mudei isso. Mas depois disso ainda não funcionou. Eu acho que é porque eu criei manualmente o objeto de leitor XML, e o que o MEF quer que eu faça é [Importar] o leitor XML ... o que significa que agora eu preciso ter uma interface para isso também.

É quase como usar IoC (ou pelo menos para o MEF), é um caso de tudo ou nada. Você não pode simplesmente usá-lo arbitrariamente aqui e ali, porque, em última análise, qualquer classe em que você deseja injetar propriedades também precisa ser criada pelo MEF.

Por favor corrija-me se eu estiver errado!

Postagem original

Bem, ainda não é tão ruim assim. :) Mas eu tenho perguntas depois que Reed me apontou o MEF como uma alternativa potencial à IoC (e até agora parece muito bom).

Considere o seguinte modelo:texto alternativo http://bit.ly/9W0sHt

Como você pode ver, eu tenho um aplicativo, e esse aplicativo usa plug-ins (oops, perdi essa associação!). O aplicativo e os plug-ins requerem o uso de um objeto do tipo CandySettings, encontrado em outro assembly.

Primeiro tentei usar o método ComposeParts no MEF, mas a única maneira de fazer isso funcionar era fazer algo assim noplugar código.

var container = new CompositionContainer();
container.ComposeParts(this, new CandySettings());

Mas isso não faz sentido, porque por que eu desejaria criar a instância de CandySettings no plug-in? Deve estar no aplicativo. Mas se eu o colocar no código do aplicativo, o plug-in não descobrirá magicamente como chegar ao ICandySettings, mesmo que eu esteja usando [Import] no plug-in e [Export] no CandySettings.EDITAR (provavelmente porque eu deveria estar chamando ComposeParts () do aplicativo e depois passar o plug-in?)

O jeito que eu fiz isso foi usar o MEF'sDirectoryCatalog, porque isso permite que o plug-in, quando construído, verifique todos os assemblies na pasta atual e importe automaticamente de forma automática tudo o que está marcado com o atributo [Importar]. Então, parece que isso, e potencialmente emcada plugar:

var catalog = new DirectoryCatalog(".");
var container = new CompositionContainer(catalog);
container.ComposeParts(this);

Isso funciona muito bem, mas não posso deixar de pensar que não foi assim que o MEF foi projetado para ser usado?

questionAnswers(1)

yourAnswerToTheQuestion