2010-05-20 15 views
7

Aparentemente .NET 4.0 no tiene PartCreator/ExportFactory para no SL. Que es algo que creo que necesito para esto.Múltiples instancias de una sola DLL MEF

Me preguntaba si alguien me puede ayudar (con un ejemplo, por favor) de cómo crear varias instancias del tipo EXPORTADO en una DLL. Básicamente digo que tengo una DLL que contiene un tipo ConsoleLogger y usa la interfaz ILogger (que importo/exporto a través de MEF) ... ¿Cómo crearía una instancia de ConsoleLogger cada vez que quisiera? Además ... ¿Esto es posible?

Respuesta

8

Una forma de hacer esto es escribir una fábrica para el registrador usted mismo y usar eso como el contrato que exporta.

public class Logger : ILogger 
{ 
    public Logger(IFoo foo) { } 
    // ... 
} 

[Export(typeof(ILoggerFactory))] 
public class LoggerFactory : ILoggerFactory 
{ 
    [Import] 
    public IFoo Foo { get; set; } 

    public ILogger CreateLogger() 
    { 
     return new Logger(Foo); 
    } 
} 

Luego solo importa un LoggerFactory, y llame a CreateLogger cada vez que necesite un registrador. Esto es más o menos lo mismo que haría si importase ExportFactory. La desventaja es que tiene que escribir una fábrica por separado para cada cosa que desee poder crear varias instancias de.

Otra opción es agregar un ExportProvider a su contenedor que le permite importar fábricas. En la última caída de MEF en CodePlex, hay una muestra de DynamicInstantiation que muestra cómo hacerlo.

+0

Gracias. Creo que esto funcionará para mi situación. – Travyguy9

0

MEF 2 Preview 1 trae ExportFactory en .NET 3.5 y 4.0:

  • ExportFactory trasladó de SL a .NET
  • versión de escritorio Parte del código
  • refactorizaciones y mejoras Potencia
  • Code Contracts ambos conjuntos son
  • nombre fuerte firmado
Cuestiones relacionadas