Tôi có một số lớp học triển khai IDessertPlugin
. Chúng được tìm thấy trong các DLL khác nhau mà tôi sử dụng MEF để quay lên các thể hiện của chúng để sử dụng như là chức năng plug-in trong ứng dụng của tôi.Tôi làm cách nào để có được số phiên bản của mỗi DLL có plugin MEF của tôi?
Vì vậy, điều tôi muốn làm là hiển thị số phiên bản của các tệp DLL mà từ đó tôi đã tải các plugin bằng MEF. Một hoặc nhiều plugin được định nghĩa trong một hoặc nhiều DLL mà tôi tải lên trong ứng dụng của mình.
Ngay bây giờ tôi làm điều gì đó giống như vậy:
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(
new DirectoryCatalog(Path.Combine(
Path.GetDirectoryName(Assembly.GetExecutingAssembly().location), "Plugins")));
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
Và đó sẽ được tải lên plugin tốt từ các thư mục con Plugins nơi ứng dụng chạy của tôi.
Làm cái gì đó như
catalog.Catalogs.First().Parts.First().GetType().Assembly.FullName
chỉ trả về "System.ComponentModel.Composition, Version = 4.0.0.0, ..."
Những gì tôi đã hy vọng để có thể biết là tôi' đã có phiên bản 1.0 của CakePlugins.dll và phiên bản 1.1 của IceCreamPlugins.dll. Bản thân các plugin không có thuộc tính phiên bản về chúng - tôi muốn dựa vào phiên bản của DLL. Hy vọng rằng có ý nghĩa.
Tôi đã không tìm ra để biết tôi đang sử dụng DLL nào ở đó để tôi có thể gọi số Assembly.GetName().Version
trên chúng.
Ý tưởng?
Giải pháp:
Vì vậy, giải pháp cho vấn đề của tôi là khá đơn giản sau khi bộ phận đã được sáng tác.
đang Plugin quản lý của tôi có một mục như vậy:
[ImportMany(typeof(IDessertPlugin)]
private IEnumerable<IDessertPluing> dessertPlugins;
và một khi các thành phần phụ tùng container đã xảy ra, tôi có thể lặp qua các plug-in của tôi như vậy:
foreach(var plugin in dessertPlugins)
{
Console.WriteLine(Assembly.GetAssembly(plugin.GetType()).GetName().Version.ToString());
}
Bạn nên đăng giải pháp của bạn dưới dạng câu trả lời và đánh dấu giải pháp đó là được chấp nhận thay vì đăng nó trong câu hỏi của bạn. – tomfanning