如何通过 DLL 提供对内部项目类的访问
本文关键字:项目 访问 内部 何通过 DLL | 更新日期: 2023-09-27 17:56:08
我有一个有多个项目的解决方案。有一个主项目,我想成为我的解决方案的唯一外部接口。在其中,我提供了一些方法,这些方法将触发代码并从包含的项目之一返回结果。到目前为止,测试应用程序在不包含对其他内部项目的引用的情况下调用方法没有问题。
但是,我在调用中使用自定义类。 这些类位于其中一个内部项目中,用于将数据传递给方法或从方法获取自定义响应或引发自定义错误。这些类驻留在其中一个内部项目中。我的问题是,如果不包含对该类所在的项目的引用,我就无法弄清楚如何在调用应用程序中获取对所需自定义类的引用。
例如,这里有一个通过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
}
}
如何在主项目中对将模型项目的类返回到使用者应用程序的属性进行编码?
应将表示请求和响应数据的所有类移动到 MAIN 模块。您还应该在主模块中创建接口,该接口将为子模块指定 API。在子模块中引用主模块并实现接口。
在此设计中,子模块仅实现MAIN需要的功能,所有数据结构和接口都在MAIN中。如果某些接口对客户端代码不可见,则应使其internal
,并在程序集级别使用InternalsVisibleTo
属性与库的其他子模块共享它,但不与客户端代码共享(更多内容是使内部类对其他程序集可见)。