ASP.NET MVC 3 RC e ViewEngine personalizados para permitir visualizações carregadas externamente
-
27-09-2019 - |
Pergunta
Estou brincando um pouco ao dividir um local MVC em várias montagens (encontrado em alguns questões mais cedo).
Agora eu tenho quase tudo funcionando, obtive o projeto principal do MVC que carrega em qualquer assemblies externo que possa encontrar. Os conjuntos externos são basicamente externos áreas. Quando eu copiei as visualizações e o web.config para as áreas do local principal, tudo funcionou, tudo funcionou bem. Agora, essa pasta provavelmente começará a ficar um pouco inchada depois de um tempo, então pensei em tentar adicionar as vistas como recursos na montagem da área em vez disso, veja como isso funcionou.
Criou o meu próprio VirtualPathProvider
e meu próprio VirtualFile
, registrou -os com o HostingEnvironment
Pensando que tudo estava bem. Acontece que só usa o VirtualPathProvider
adicionado ao HostingEnvironment
na primeira carga, não pelas seguintes cargas de visualização pelo ViewEngine
.. ok bem, encontrei alguns exemplos de como você poderia contornar isso implementando o seu próprio ViewEngine
Para usar seu próprio VPP. Mas sim, isso não parece ser uma solução viável para o MVC 3 ..
Como se vê, nem RazorViewEngine
nem WebFormViewEngine
Implementar duas das "funções-chave", ao que parece, FileExists
e IsValidPath
. Estes são herdados de BuildManagerViewEngine
, E sabe de uma coisa? Esses métodos são marcados como sealed
..
Alguém que já tentou isso com o MVC 3 e talvez possa me levar na direção certa? Estou olhando para a fonte do MVC 3 agora há um bom tempo, mas não consigo ver nenhuma maneira de fazer isso ..
Solução
Agora me sinto um pouco estúpido, parece que carreguei o VPP tarde demais .. tinha isso em Application_Start
, mas quando eu o movi para o meu PreApplicationStartMethod
Em vez disso, foi usado pelo ViewEngine
. (Portanto, nenhuma implementação de ViewEngine
parece ser necessário, Wey!)
O problema agora é que, quando tento chegar a uma visão que é armazenada como um recurso, posso baixá -lo em vez de renderizá -lo. Mas isso é algo diferente disso!