如何调用没有引用dll的c类库文件

本文关键字:dll 引用 文件 类库 何调用 调用 | 更新日期: 2023-09-27 18:24:42

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

如何调用没有引用dll的c类库文件

您的示例不是很清楚,但我猜您想调用类库中的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()方法等。

使用

using Service;

之前

namespace MyService
{
    // ...
}

不确定你到底想做什么…标题说没有引用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)
        }
    }
}