2012-02-16 40 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