c# - mvc - Funcionalidad modular con ASP.NET vNext Core CLR
asp.net core wiki (2)
Con ASP.NET 4.5, es posible usar Assembly.Load()
o AppDomain.CurrentDomain.Load()
para cargar dinámicamente un ensamblado en tiempo de ejecución. Esto se puede utilizar para agregar nuevas funcionalidades a una aplicación web en ejecución en forma de módulos sin tener que reconstruir o incluso reiniciar la aplicación.
Me gustaría saber cómo se puede hacer esto con el nuevo ASP.NET vNext (5.0?) Dirigido al framework Core. Sé que esto se puede hacer con el marco completo como System.AppDomain
está disponible junto con un Assembly.Load()
sobrecargado Assembly.Load()
. Cuando cambio al objetivo del marco principal, ya no tengo System.AppDomain
disponible y Assembly.Load()
vuelve limitado.
¿Hay alguna manera de obtener esta funcionalidad modular dinámica en el marco principal de ASP.NET 5.0?
No estoy seguro de cuál sería una buena respuesta, porque Asp.Net 5 es muy nuevo y no tiene mucha documentación completa.
Teóricamente debería ser posible, será diferente de lo que está acostumbrado.
En cuanto a la fuente, hay una interfaz IAssemblyLoadContext que le permitirá obtener el ensamblaje. También hay IAssemblyLoader .
Estos son utilizados por el host "kre", que es la pieza subyacente de Asp.Net 5 que básicamente impulsa su aplicación. Por lo tanto, necesitaría agregar su IAssemblyLoader
al host subyacente, de modo que el kre.
Lamentablemente, aún no veo muchos puntos de extensión en el código. ¿Obtendremos esos puntos de extensión? No lo sé. Puede registrar un problema en la página de github . También es posible que haya un punto de extensión que no veo actualmente.
Para volver a la pregunta, ¿puede agregar ese tipo de extensibilidad a Asp.Net 5 Core? Sí, podría crear su propio host, similar al host predeterminado, que luego incluiría su cargador personalizado y luego iniciar su aplicación con eso.
Puede probar el marco ExtCore
Permite tener aplicaciones modulares y extensibles de ASP.NET 5 listas para usar .
En breve
- Permite usar ambos módulos de dlls y de paquetes nuget al mismo tiempo.
- Permite que todos los módulos funcionen con almacenamiento en el contexto único y que tengan sus propios modelos y repositorios.
- Cada extensión puede tener controladores, vistas, contenido estático, etc.