2013-06-20 67 views
0

我正在研究C#類庫項目。該項目引用其他DLL文件,例如log4net.dll。在這個項目中,我只有一個使用log4net.dll的類。當其他項目引用我的項目時,我只想在其他項目調用使用log4net.dll的類時將log4net.dll複製到它的bin文件夾。動態複製DLL文件。

這可行嗎?

+1

如何動態加載DLL並完全避免硬引用:http://stackoverflow.com/questions/465488/can-i-load-a-net-asse mbly-at-runtime-and-instantiate-a-type-know-only-the-na – DonBoitnott

+0

這就是我正在做的。我有一個適配器,用戶可以調用並設置DLL路徑。但是我不希望用戶這樣做,如果我能夠複製DLL,如果我看到用戶的項目將需要它。 – Lucas

回答

0

將庫拆分爲兩部分,並從主庫中刪除對log4net.dll的引用,並且僅在需要將某些內容綁定到需要log4net.dll的部分時引用第二個庫。

好辦法如何處理這樣的情況下,依賴注入 - 看看企業庫(統一容器) - 儘管這會給你一個額外的dll :)

使用Unity容器:

你」會具有與分享幫助ILog4NetUsingInterface

在Library2你就會有類Log4NetUsingClass:ILog4NetUsingInterface

在Library2你必須引導程序,將註冊Log4NetUsingClass是否履行作爲ILog4NetUsingInterface離子

public static class Bootstrapper { 
    public static void Init() { 
     ServiceLocator.IoC.RegisterSingleton<ILog4NetUsingInterface, Log4NetUsingClass>(); 
    } 
} 

此初始化方法,如果你需要使用Log4NetUsingClass

在每一個其他圖書館你只叫你可以叫

ServiceLocator.IoC.Retrieve<ILog4NetUsingInterface>() 

(如果你不調用引導程序它會給你運行時錯誤。)