2010-09-23 98 views
0

我正在使用第三方庫,需要在使用靜態方法之前調用它 - 它將設置序列鍵以驗證軟件的許可證。我需要在多個項目中使用這個庫,我想避免這些項目需要擔心此許可證。理想情況下,我想創建一個共享程序集,它將處理許可證,並使用該庫的項目引用它,並將這些項目從知道任何許可證正在發生的地方隔離出來。動態加載程序集的組件屬性

開始考慮完成此操作的一種方法是使用程序集屬性。所以,我提出一個具有構造器來設置許可證:

[AttributeUsage(AttributeTargets.Assembly)] 
public class LibraryLicenseAttribute : Attribute 
{ 
    public LibraryLicenseAttribute() 
    { 
    Lib.SetLicense("valid key"); 
    } 
} 

,並把它放在一個包裝項目:

LibraryWrapperProject 
    Properties 
    AssemblyInfo.cs 
    References 
    Lib.dll 
    LibraryLicenseAttribute.cs 

,並請有包括它的AssemblyInfo.cs調用:

LibraryUserProject 
    References 
    LibraryWrapperProject 
    LibraryUser.cs 
[LibraryLicense] 

現在,我可以在使用該庫的另一個項目中引用這個項目

...但是當我去使用這個庫...

class LibraryUser 
{ 
    public LibraryUser() 
    { 
    Lib.Use(); 
    } 
} 

據報道,該許可證還沒有確定。我發現我可以在調用項目的AssemblyInfo.cs中包含該屬性,並且該屬性將被調用。這比將許可重新分配給所有下游項目要好,但他們仍需要額外的努力才能使其發揮作用。

此外 - 一些項目動態加載其他軟件。例如:

Assembly.Load("LibraryUserProject.dll"); 

如何在動態加載包含它的程序集時調用授權程序集屬性?是否有另一個.NET框架功能可以使這更容易?

+0

你是否總是從相同的應用程序域內調用? – 2010-09-23 03:32:33

回答

0

沒有太多的分析問題的解決方案,我建議您查看AppDomain.CurrentDomain.AssemblyLoadAppDomain.AssemblyResolve事件,以便在程序集解析或加載時運行代碼。

另一個更優雅的解決方案可能使用靜態類型初始值設定項(靜態構造函數)或Module Initializers。靜態類型初始化器在類型被引用並且易於實現時被首次調用。但是,Module Initializers in C#不是一項簡單的任務,但您可以通過實施來實現您的目標。

+0

我正在尋找的是模塊初始化程序,但不平凡的實現有點令人失望。 – 2010-10-05 16:51:34