Como você está usando o Managed Extensibility Framework?

10

Trabalho com o MEF há cerca de duas semanas. Comecei a pensar sobre o que é o MEF, pesquisando para descobrir como usar o MEF e finalmente implementando um Host com 3 módulos. Os contratos estão provando ser fáceis de entender e os módulos são facilmente gerenciados.

Embora o MEF tenha um uso muito prático, eu me pergunto até que ponto? Quero dizer, todo mundo vai reescrever aplicativos existentes para extensibilidade?

Sim, isso soa e é incrivelmente impraticável. Retoricamente falando:

  • como o MEF está afetando as tendências atuais da programação?

  • você começou a procurar oportunidades para usar o MEF?

  • você começou a planejar uma grande reescrita de um aplicativo existente que pode se beneficiar da extensibilidade?

Dito isso, minhas perguntas são:
como sei quando devo planejar um novo projeto com extensibilidade?
como saberei se um projeto existente precisa ser reescrito para extensibilidade?

Alguém está usando o MEF?

IAbstract
fonte

Respostas:

8

Alguém está usando o MEF?

Estou trabalhando em um projeto Silverlight usando o padrão MVVM. Começamos conectando todas as VMs apenas conforme necessário, por meio de interfaces e injeção manual de dependência (injeção de construtor ou propriedade, dependendo da necessidade). Começou a ficar doloroso e começamos a usar o MEF como basicamente uma estrutura de injeção de dependência para exportar certos serviços que são usados ​​nos modelos de vista e importá-los para os modelos de vista que precisam deles. Funciona perfeitamente e com muito pouco código.

Sim, existem alguns puristas por aí que dizem que o MEF não se destina à injeção de dependência e uma estrutura real de injeção de dependência será muito melhor. No entanto, o MEF é inserido diretamente no .NET, o que é uma grande vantagem, e foi suficiente para atender às nossas necessidades.

como sei quando devo planejar um novo projeto com extensibilidade? como saberei se um projeto existente precisa ser reescrito para extensibilidade?

Na IMO, você sempre deve separar as preocupações adequadamente e usar interfaces para permitir que diferentes módulos sejam alterados independentemente. Se você fizer isso corretamente, quando achar necessário ampliar, o MEF deve ser fácil de adicionar. Mas eu não iniciaria um projeto que não tivesse requisitos de extensibilidade e colocaria o MEF apenas por precaução. Eu esperaria que houvesse uma necessidade. Para projetos existentes, se houver necessidade, eu avaliaria o esforço de religar o projeto para usar o MEF versus soluções alternativas, em vez de não fazer nada, e ver quais vencem.

RationalGeek
fonte
6

O erro que as pessoas cometem, e eu acho que é por causa da nomeação (Managed Extensibility Framework), supor que o MEF é apenas prático para extensibilidade. O MEF realmente trata de três coisas principais: extensibilidade, descoberta e metadados. Os dois últimos são muito poderosos, mesmo para um aplicativo que nunca verá um único plug-in ou extensão.

Este é um artigo que escrevi sobre seu poder de descoberta como um contêiner do COI: http://www.informit.com/articles/article.aspx?p=1635818

Uso o MEF na maioria dos aplicativos corporativos de linha de negócios, pois torna mais rápido e fácil a criação e a manutenção de aplicativos modulares no Silverlight.

Jeremy Likness
fonte
Eu li o seu artigo - pelo menos duas vezes;)
IAbstract
4

Atualmente, estou usando o MEF em alguns projetos que incorporam o padrão de repositório.

Um está usando diferentes tipos de repositório durante o teste de unidade, o outro projeto está usando repositórios local (direto ao DB), remoto (WCF) e de teste.

Ambos os projetos podem alterar seus tipos de repositório por código ou configuração e são baseados nos metadados MEF / tipos Lazy.

Até o momento, os dois projetos estão executando incrivelmente bem.

Kieron
fonte