Pergunta

Estou em um grande dilema. Estou trabalhando no aplicativo web altamente modular no ASP.NET MVC 2 (na verdade, o núcleo será super leve, todos funcionarão em módulos/plugins). Achei o MEF bastante útil para a descoberta de módulos, mas não quero -nos como contêiner do COI. Há uma boa chance de precisar de recursos avançados do contêiner "verdadeiro" do COI, por isso gostaria de usar o Unity.

E aqui está o problema: como permitir que os módulos configurem o contêiner (programaticamente) = registrar seus próprios tipos (controladores MVC, implementações personalizadas dos serviços ...) no aplicativo Inicie sem tornar a dependência difícil da unidade em todos os módulos? Conheço o projeto comum do localizador de serviços, e parece muito bom, mas esse contêiner de interface Co permite apenas a resolução de tipos, não os registrando (AFAIK).

Eu realmente espero que você possa entender meu ponto, eu sei que meu inglês é terrível (eu sou do país que não fala inglês :) muito obrigado!

Foi útil?

Solução

Certamente, posso simpatizar por não querer usar o MEF como contêiner DI, mas acho que você ainda deve considerar se isso pode não ser aplicável aos seus complementos.

Você já exigem que seus complementos usem mef, então todos eles terão uma dura dependência disso. Embora eu pessoalmente não goste da abordagem codificada e baseada em atributos usada pelo MEF, parece que você está perguntando como cada suplemento pode se registrar no contêiner DI. Isso também parece codificante para mim, então você também pode usar o MEF todo o caminho.

Aplicando atributos do MEF é Registro de componentes.

Se você realmente não quer usar o MEF, só tem algumas outras opções (nenhuma delas particularmente mais atraente):

  • Exigem que todos os complementos também tenham uma dependência difícil da unidade. Eu entendo completamente por que você não quer fazer isso, mas estou apenas incluindo esta opção por uma questão de completude
  • Requer que todos os suplementos também tenham uma dependência difícil do localizador de serviço comum. Na minha opinião, isso apenas muda o problema um pouco.
  • Defina sua própria interface de registro de suplemento que todos os complementos devem implementar. Você pode escrever sua própria implementação que usa a unidade, para que todos os complementos se registrem nessa interface, mas depois apenas duplicando os recursos do MEF.
  • Escreva todos os complementos em um Diferença, mas em contêiner-agnóstico estilo. Isso deixa o problema de configurar o contêiner DI e você terá que recorrer à configuração XML para isso. Isso é muito frágil abordar e pode rapidamente levar a Manter inferno, então, mais uma vez, estou apenas incluindo esta opção por uma questão de completude.

O uso do MEF para complementos não o impede de usar a unidade em seu aplicativo principal, mas eu entendo que é muito leve, de modo que isso pode não fazer muito sentido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top