2012-02-16 129 views
0

這可能是一個簡單的問題,但我不知道,如何做到這一點。如何調用C#類的lib文件與參考該DLL

我有一個名爲(service.cs)的類庫。

我有WCF服務都在相同的解決方案。這裏試圖做什麼,我試圖從我的服務合同中調用服務類upload.uploading()方法在wcf中並傳遞值。

namespace MyService 
{ 
    class MyService : IServiceContract 
    { 


     public void Insert(string Name) 
     { 


      if (core == true) 
      { 

       Upload(XmlFile); 
      } 
      else 
      { 


      } 
     } 

這裏是樣本類庫文件

namespace Service 
{ 
    class upload 
    { 
     public void Uploading(string file) 
     { 
     console.writeline(file) 
    } 
    } 
} 
+0

亞瑟,請加什麼是你想要做什麼,錯誤信息,您在編譯器等越來越......這是很難回答的時候,問題是不明確... – 2012-02-16 08:20:04

+0

@dtb和casperone對此感到遺憾,沒有提到清楚。 – Usher 2012-02-16 22:16:09

回答

1

你舉的例子不是很清楚,但我猜測你想打電話給Upload.Uploading()見面這是在一個類庫中。

做到這一點,最好的方法是創建一個接口,這樣的:

public interface IUploader 
{  
    void Upload (string name); 
} 

,並有外部類庫實現它:

public class Uploader : IUploader 
{ 
    public void Upload(string name) 
    { 
     // Do the logic. 
     Console.WriteLine(name); 
    } 
} 

現在,在你的主要使用此代碼程序:

public void Insert (string filename) 
{ 
    var classLib = System.Reflection.Assembly.Load("MyClassLibrary.dll"); 
    var type = classLib.GetType("MyClassLibrary.Uploader"); //FULL NAME with namespace.; 
    IUploader uploader = Activator.CreateInstance(type) as IUploader; 

    uploader.Upload(filename); 
} 

你在做什麼是動態加載的類庫(1號線),動態摹通過反射(第2行)設置它的類型並創建它的一個實例(第3行)。

把它實現一個接口,像IUploader,所以它知道如何處理它這是衆所周知的主程序是很重要的,如何調用它的上傳()方法等

+0

爲什麼實際上要插入全名?當你只需要查看某種屬性(自定義),那麼你不必設置任何名稱,那麼你將不會在名稱和你使用的程序集之間有任何耦合。 – IamStalker 2012-02-16 07:09:14

+0

你忘了依賴注入還有一件事 – IamStalker 2012-02-16 07:10:07

+0

我甚至會避免自定義屬性,只是遍歷Assembly的GetTypes()尋找實現IUploader的任何事情,但所有這些都超出了範圍。首先讓OP熟悉反射和程序集加載的基本概念,否則這是一團亂七八糟的代碼,沒有上下文就沒有意義。 – 2012-02-16 08:19:01

0

使用

using Service; 

namespace MyService 
{ 
    // ... 
} 
0

不知道到底是什麼你試圖做...標題說,沒有參考DLL? Service.upload類位於何處?相同的解

如果是這樣,那麼可以像Nikhil所說的那樣使用using語句來引用命名空間。

例子:

using Service; 

namespace MyService 
{ 
    class MyService : IServiceContract 
    { 
     public void Insert(string Name) 
     { 
      if (core == true) 
      { 
       var uploader = new Upload(); 
       uploader.Uploading(XmlFile); 
      } 
      else 
      { 

      } 
     } 
    } 
} 


namespace Service 
{ 
    class Upload 
    { 
     public void Uploading(string file) 
     { 
      console.writeline(file) 
     } 
    } 
} 
+0

service.upload類位於相同的解決方案中。 – Usher 2012-02-16 10:32:54