usar - variable static c#
Uso de C#MEF con clases estáticas (2)
Bueno, resulta que el método que estaba buscando es GetExportedValue
(sí, pasé por alto la funcionalidad básica):
static private A _a1;
public static A LoadPackage(string filePath)
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(filePath));
var _container = new CompositionContainer(catalog);
_a1 = _container.GetExportedValue<A>();
}
Y obtuve mi campo lleno (por si acaso, ya lo moví a otra clase, y se ve limpio y ordenado ahora)
Tengo una clase estática en mi solución que se usa para trabajar con varios ensamblajes. Quiero vincularlos a través de MEF, así que hice un campo en una clase.
[Import(typeof(A))]
static private A _a1;
Luego tengo un método para pasar el nombre del ensamblado como argumento:
public static A LoadPackage(string filePath)
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(filePath));
var _container = new CompositionContainer(catalog);
???
}
Entonces, ¿hay alguna forma de importar el tipo de ensamblado especificado por filepath?
No puedo hacer:
_container.ComposeParts(this);
ya que la clase es `estática y tampoco puedo hacer esto
_container.ComposeParts(_a1);
(lo cual podría ser completamente incorrecto para empezar) ya que A
no tiene ningún constructor (entonces _a1
es nulo)
MEF está diseñado para crear e inicializar objetos para usted. No se trata de estado en clases estáticas.
Sugiero que haga que la clase y sus campos no sean estáticos, y lo marque con [PartCreationPolicy(CreationPolicy.Shared)]
si desea aplicar el comportamiento de singleton.
Ver también esta otra pregunta sobre MEF y el patrón singleton.