动态引用dll

时间:2015-10-21 06:08:59

标签: c# .net dll

我必须创建一个代码,我需要使用多个Web服务引用。所有服务引用本质上都是同一服务的端点,但适用于不同的数据源。所以这些引用都包含相同的功能。

是否可以构建一个动态检查引用的解决方案,并为所有引用运行相同的功能。实际上是这样的:

    printf("Give a surname to delete: ");
    if (scanf("%29s", name) == 1)
    {
        FILE *fp = fopen("file.tmp", "w");
        if (!fp) perror("file.tmp"), exit(1);
        scan(NULL, name, 0, fp);    // print non-matching lines to tempfile
        if (fclose(fp) < 0) perror("file.tmp"), exit(1);
        remove("file.txt");
        if (rename("file.tmp", "file.txt") != 0) perror("file.tmp");
    }

我知道这有点牵强,任何帮助都会受到赞赏。

编辑(为清晰起见):这些引用是SOAP API引用,因此方法定义也可以从Web下载。但由于所有引用都属于同一服务(仅适用于不同的帐户),因此所有引用都是相同的。

1 个答案:

答案 0 :(得分:-1)

尝试使用反射加载程序集。

public List<IServiceInterface> CreateShippingInstance(string assemblyInfo)
{
    Type[] assemblyType = Type.GetTypeArray(assemblyInfo);
    if (assemblyType != null)
    {
        List<IServiceInterface> serviceClientList = new List<IServiceInterface>();
        Type[] argTypes = new Type[] { };

        foreach(var item in argTypes)
        {
           ConstructorInfo cInfo = assemblyType.GetConstructor(argTypes);

           IServiceInterface serviceClient = (IServiceInterface)cInfo.Invoke(null);

           if(serviceClient!=null)
           serviceClientList.Add(serviceClient);
        } 

        return serviceClientList;
    }
    return null;       
}

现在你的主要代码就是这样。

List<IServiceInterface> serviceClientList = CreateShippingInstance("Namespace, classname");//class full name with namespace, you can google for details

foreach(var item in serviceClientList)
{
   item.DoOperation();
}

对于安全代码,您可以使用单独的项目进行服务引用。

希望这会有所帮助!