如何在没有引用dll的情况下调用c#类lib文件

时间:2012-02-16 06:51:28

标签: c#

我有一个名为(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)
    }
    }
}

3 个答案:

答案 0 :(得分: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,主程序已知它,因此它知道如何处理它,如何调用它的Upload()方法等。

答案 1 :(得分:0)

使用

using Service;

之前的

namespace MyService
{
    // ...
}

答案 2 :(得分:0)

不确定你到底要做什么......标题说没有参考dll? Service.upload类位于何处?相同解决方案

如果是这样,您可以使用using语句引用命名空间,如Nikhil所述。

示例:

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)
        }
    }
}