Tôi đang sử dụng MEF để tải các plugin trong ứng dụng của mình. Mọi thứ đều hoạt động, nhưng tôi muốn các phần mới được phát hiện khi chúng được thả vào thư mục ứng dụng của tôi. Điều này có thể không? DirectoryCatalog có một sự kiện đã thay đổi nhưng tôi không chắc nó hoạt động như thế nào.Làm thế nào để khám phá các bộ phận MEF mới trong khi ứng dụng đang chạy?
Đây là mã của tôi ngay bây giờ:
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);
}
}
ngoài ra bạn có thể xem xét bật sao chép bóng để cho phép hoán đổi nóng cụm của bạn – tartakynov
@tartakynov cách bật sao chép bóng? – zionpi
@zionpi xem chủ đề này http://stackoverflow.com/questions/4595304/change-dll-loaded-with-mef – tartakynov