Estou no estágio de planejamento para a criação de um sistema de intranet de funcionários com o ASP.NET MVC 4. Gostaríamos que o site consistisse em "módulos" separados, cada um com um recurso diferente: mensagens, alterações na folha de pagamento etc. Gostaria que esses módulos pudessem ser habilitados ou desabilitados em tempo de compilação. A página inicial exibirá algum tipo de navegação que será vinculado a cada módulo carregado.
Até agora, isso é fácil, mas não quero que o recurso de navegação precise conhecer os módulos com antecedência. Em outras palavras, quero que os módulos sejam dinamicamente detectáveis; Quero poder escrever o código para um novo módulo e adicionar um link à barra de navegação sem alterações de código em nenhum outro local da fonte. Cada módulo deve ter alguma maneira de se registrar na barra de navegação e, o que é mais importante, isso deve ser feito para cada módulo à medida que é carregado.
Acredito que isso impede o uso das Áreas do MVC, pois elas foram projetadas para o caso em que o layout do site é conhecido anteriormente. Parece que o MEF pode ser apropriado, embora as pessoas pareçam ter tido sucesso misto na combinação do MEF com o MVC. O MEF é realmente o caminho a seguir aqui ou existe uma maneira melhor de realizar o que eu preciso?
fonte
Respostas:
Primeiro, eu teria uma classe centralizada usada para o aplicativo registrar módulos compilados com um construtor estático e um membro estático Lista de módulos que estavam no sistema. Os módulos teriam uma propriedade estática indicando se é um item de menu ou não e em que ordem ele deve aparecer no menu.
Cada módulo teria seu próprio construtor estático que se notaria na classe centralizada que acompanha os módulos.
Pense neste sistema mais como um sistema de relógio de ponto em que os funcionários entram e cronometram. Então, no horário da folha de pagamento, sabemos que pagamos a todos os funcionários com base em quem fez o horário, etc.
O Reflection também pode ser usado se você tiver um contrato de interface nos módulos que eles devem herdar, que vincula informações de metapropriedades a ele.
Trabalhei na Warner Brothers Music e fiz um sistema interno de processamento de música para diferentes formatos de codificação. Eu criei um modelo genérico de plug-in para codificação com reflexão que usava herança para que pudesse ser convertida em reflexão para obter as meta propriedades básicas da classe. Ainda não tentei usar uma classe centralizada estática. Apenas pensei nisso aleatoriamente como outra maneira de tentar se divertir.
Eu também acrescentaria que usei o MVC atendendo a vários clientes com uma linha de base de requisitos, mas também com recursos aprimorados semelhantes ao que você está tentando fazer. Em vez disso, converti o MVC para o App_Code, em vez de exigir uma compilação. É mais fácil enviar arquivos dessa maneira sem a necessidade de uma compilação centralizada.
Você pode aproveitar o JIT com push FTP ou GIT simples, em vez de precisar compilar localmente e enviar DLLs.
Aqui está um link para esse artigo sobre estouro de pilha
fonte
Você pode querer usar o MEF com MVC. Isso daria a você a capacidade de adicionar - retirar, conforme necessário, sem recompilar ou implantar. Como sempre, Scott é um bom lugar para começar: http://www.hanselman.com/blog/ExtendingNerdDinnerAddingMEFAndPluginsToASPNETMVC.aspx
fonte