2012-02-16 10 views
0

簡単な質問かもしれませんが、その方法はわかりません。DLLを参照せずにC#クラスのlibファイルを呼び出す方法

私は(service.cs)と呼ばれるクラスライブラリを持っています。

私はWCFサービスを持っていますが、何をしようとしているのですか?wcfのサービス契約からサービスクラスupload.uploading()メソッドを呼び出して値を渡そうとしています。

ここ
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

アッシャーは、あなたがやろうとしたものを追加してください、あなたはコンパイラなどからどのようなエラーメッセージを取得している...それは質問が明確でないときに答えるのは難しい... –

+0

@ dtbとcasperoneは申し訳ありませんが、明確に言及されていません。 – Usher

答えて

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)、動的にgリフレクション(2行目)とそのインスタンス(3行目)を使用して、クラス内のクラスの型を決定します。

それは正確に何をしてくださいなど、そのアップロード()メソッドを呼び出す方法、それはそれを処理する方法を知っているので、メインプログラムにはよく知られているIUploader、のように、それはインターフェイスを実装持って

+0

実際にフルネームを挿入するのはなぜですか?何らかの属性(カスタム)を見るだけで名前を設定する必要がない場合は、名前と使用するアセンブリの間の結合がありません。 – IamStalker

+0

もう1つは依存性注入を忘れました – IamStalker

+0

カスタム属性を避け、IUploaderを実装するものを探しているアセンブリのGetTypes()を繰り返し処理するだけですが、これはすべて範囲外です。最初に、OPがリフレクションとアセンブリの読み込みの基本的な概念に精通するようにしてください。そうでなければ、コンテキストなしで意味をなさないコードの大混乱です。 –

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

関連する問題