Cómo exportar un tipo en el MEF como si el atributo de exportación se había aplicado a ese tipo?
-
25-09-2019 - |
Pregunta
Me gustaría aplicar dinámicamente el atributo MEF Exportar a un tipo en tiempo de ejecución, exactamente como si el tipo había tenido un atributo de exportación aplicado en tiempo de compilación.
¿Hay una manera simple de hacer esto?
Aparte de eso, hay una manera compleja para hacer esto?
Solución
Si usted puede permitirse el uso de .NET 4.5 (que significa el abandono del soporte de Windows XP), ahora se puede utilizar de MEF registro de atributos menos alias Modelo de Convenio .
En .NET4 o anteriores versiones preliminares del MEF Esto no es compatible fuera de la caja, pero todavía MEF puede ser ampliado mediante la creación de sus propias implementaciones de ExportProvider o ComposablePartCatalog .
El href="http://mefcontrib.codeplex.com/wikipage?title=Provider%20Model%20Fluent%20Definition%20Provider" rel="nofollow noreferrer"> Proveedor Definición es una implementación de este tipo que le permite registrar las importaciones y exportaciones de llamadas a métodos.
El MEF Contrib configurable Definición Proporcionar r es otra que le permite configurar las importaciones y exportaciones en un archivo XML.
Sin embargo, otra opción es hacer el registro en Autofac y el uso a continuación, su MEF integración para hacer los componentes autofac disponibles al MEF.
Otros consejos
No estoy 100% seguro, pero no creo que eso es posible que ver con el MEF. Un patrón a utilizar para proporcionar un comportamiento similar, aunque es el patrón de la fábrica / proveedor.
interface IData {}
interface IDataProvider {
IData Data { get; set; }
}
[Export(IDataProvider)]
class DataProvider : IDataProvider {
public IData { get; set; }
}
Se puede utilizar este modelo para actualizar dinámicamente la implementación de IData
al valor que desea usar.