Estoy usando MEF para cargar complementos en mi aplicación. Todo funciona, pero quiero que se descubran nuevas piezas cuando se guardan en la carpeta de mi aplicación. es posible? DirectoryCatalog tiene un evento modificado, pero no estoy seguro de cómo funciona.¿Cómo descubrir nuevas partes de MEF mientras se ejecuta la aplicación?
Este es mi código en este momento:
public sealed class RevealerFactory
{
private static readonly Lazy<RevealerFactory> lazy =
new Lazy<RevealerFactory>(() => new RevealerFactory());
public static RevealerFactory Instance { get { return lazy.Value; } }
private FileSystemWatcher watcher;
private RevealerFactory()
{
Initialize();
}
[ImportMany(RequiredCreationPolicy = CreationPolicy.Shared)]
private IEnumerable<Lazy<IRevealer, IRevealerCapabilities>> Revealers {
get;
set;
}
public IRevealer GetRevealer(Uri uri)
{
return (from revealer in Revealers
where uri.Host.Equals(revealer.Metadata.Host,
StringComparison.OrdinalIgnoreCase)
&& revealer.Value.IsRevelable(uri)
select revealer.Value).FirstOrDefault();
}
private void Initialize()
{
var catalog = new DirectoryCatalog(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
+ "/SDownloader/Revealers");
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
}
además se puede considerar para permitir la copia sombra para permitir intercambio en caliente de sus asambleas – tartakynov
@tartakynov cómo habilitar la copia sombra? – zionpi
@zionpi echa un vistazo a este tema http://stackoverflow.com/questions/4595304/change-dll-loaded-with-mef – tartakynov