2012-08-07 29 views
8

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()); 
} 
+0

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

Trả lời

1

Vì vậy, giải pháp cho vấn đề của tôi khá đơn giản sau khi các phần được soạn thảo. Tôi đã cố gắng đào sâu vào các đối tượng MEF thay vì nhìn vào container chứa tất cả các plug-in mà tôi đã nạp. Câu trả lời là hoàn toàn phớt lờ sự thật về cách các plug-in đó được nạp và chỉ nhìn vào các đối tượng được tạo ra.

đ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()); 
} 
2

Bạn có thể nhận thông tin lắp ráp từ các thuộc tính khác nhau AssemblyVersion, AssemblyFileVersionAssemblyDescription.

   /// <summary> 
       /// This class provide inforamtion about product version. 
       /// </summary> 
       public class ProductVersion 
       { 
        private readonly FileVersionInfo fileVersionInfo; 

        private readonly AssemblyName assemblyName; 


        private ProductVersion(Type type) 
        { 
         // it done this way to prevent situation 
         // when site has limited permissions to work with assemblies. 
         var assembly = Assembly.GetAssembly(type); 
         fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); 
         assemblyName = new AssemblyName(assembly.FullName); 
        } 

        public string AssemblyFileVersion 
        { 
         get 
         { 
          return fileVersionInfo.FileVersion; 
         } 
        } 

        public string AssemblyVersion 
        { 
         get 
         { 
          return assemblyName.Version.ToString(); 
         } 
        } 



       } 
+0

Xin cảm ơn phản hồi của bạn. Vấn đề của tôi không phải là tìm ra cách để tìm hiểu thông tin từ hội đồng nhưng làm thế nào để có được thông tin lắp ráp từ các đối tượng MEF, mà không phải là cách để làm điều đó dù sao đi nữa. Khi tôi đã soạn các phần trong thùng chứa, các đối tượng của tôi được tạo ra và sau đó tôi có thể lặp lại thông qua chúng và nhận thông tin tôi cần. – itsmatt

Các vấn đề liên quan