如何通过DLL提供对内部项目类的访问

时间:2016-07-08 20:04:50

标签: c# .net dll

我有一个包含多个项目的解决方案。有一个MAIN项目,我想成为我解决方案的唯一外部接口。在其中,我提供了一些方法,这些方法将触发代码并从其中一个包含的项目返回结果。到目前为止测试应用程序调用方法没有包括对其他内部项目的引用没有问题。

但是我在调​​用中使用了自定义类。这些类存在于其中一个内部项目中,用于将数据传递给方法或从方法获取自定义响应或引发自定义错误。这些类位于其中一个内部项目中。我的问题是我无法弄清楚如何在调用应用程序中获取对所需自定义类的引用,而不包括对该类所在项目的引用。

这里的示例是一个通过main_Project可供消费者使用的方法:

  public class UtilitiesController
{

    public static ShapeVerifyResponse VerifyShape(int shapeId, float[] dimensions)
    {
        ShapeVerifyResponse result = null;
        IValidateShape worker = new clsGraphics();

        try
        {                
            result = worker.VerifyShape(shapeId, dimensions);
            return result;
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            if (result != null)
            {
                result = null;
            }
            if (worker != null)
            {
                worker = null;
            }
        }  

    }

ShapeVerifyResponse在另一个内部项目中定义,该项目包含我正在使用的所有模型和接口。这是班级:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BBV2_DomainClasses.Models
{
    public class ShapeVerifyResponse
    {
        public float Width { get; set; } // Width of shape
        public float Height { get; set; } // Height of shape
        public Boolean edgework { get; set; } // is edgework allowed
        public ArrayList  errorlist { get; set; } // list of errors

    }
}

如何在主项目中编写一个属性,将属性模型的类返回给消费者应用程序?

1 个答案:

答案 0 :(得分:0)

您应该将表示请求和响应数据的所有类移动到MAIN模块。您还应该在MAIN模块中创建将为子模块指定API的接口。在子模块中引用MAIN模块并实现接口。

在此设计中,子模块仅实现MAIN所需的功能,所有数据结构和接口都在MAIN中。如果某些接口不应对客户端代码可见,则应将其internal并在程序集级别使用InternalsVisibleTo属性与库的其他子模块共享,但不与客户端代码共享(更多内容{ {3}})。