Używam MEF do ładowania wtyczek w mojej aplikacji. Wszystko działa, ale chcę, aby odkryto nowe części, gdy zostaną umieszczone w folderze mojej aplikacji. czy to możliwe? DirectoryCatalog ma zdarzenie Changed, ale nie jestem pewien jak to działa.Jak odkrywać nowe części MEF podczas działania aplikacji?
To jest mój kod teraz:
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);
}
}
dodatkowo możesz rozważyć włączenie kopiowania w tle, aby umożliwić wymianę na gorąco swoich zespołów – tartakynov
@tartakynov jak włączyć kopiowanie w tle? – zionpi
@zionpi sprawdź ten temat http://stackoverflow.com/questions/4595304/change-dll-loaded-with-mef – tartakynov