WebAPI(MyProject)引用ThirdPartyLib进行数据检索和发布。在ThirdPartyLib中定义了很多模型,我想在WebAPI中重用 传递给客户/消费者。我不希望客户引用ThirdPartyLib。我找不到在MyProject中包装ThirdPartyLib模型/类的方法。
这是正确的方法吗?只是定义一个空的并引用第三方客户模型?序列化如何?
public class Customers : ThirdPartyLib.Models.Customers
{
}
通过这种方式,客户必须在其项目中引用ThirdPartyLib以获得客户模型/类属性。 如何以无须每次更改或添加ThirdPartyLib模型时都更新MyProject的方式将客户模型包装在MyProject中?
namespace MyProject.Controllers
{
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values/5
[HttpGet("{id}")]
public ActionResult<ThirdPartyLib.Models.Customers> Get(int id)
{
return GetCustomers();
}
}
}
答案 0 :(得分:0)
如果您的第三方库的任何部分公开了,那么消费者将不得不依赖它。就那么简单。删除该依赖项的唯一方法是完全不公开它。
这意味着您必须映射到自己的类中/从自己的类中映射,以表示第三方库中的类。消费者将使用您的类,然后将其映射到第三方库类以进行实际工作。然后,消费者不知道或不在乎实际在做什么。
更明确地说,这意味着您甚至无法从第三方库继承。即使您仅使用MyLib.Customers : ThirdPartyLib.Customers
,ThirdPartyLib
之类的东西仍然需要对MyLib.Customers
的依赖。您需要为您的Customers
版本创建一个干净的POCO,该POCO不会继承任何东西,或者至少不继承任何库外的东西。这就是映射部分的用处。您将基本上将属性的值从您的Customers
实例移至第三方库的Customers
的实例。既可以手动处理,也可以手动处理,也可以使用AutoMapper之类的库根据约定/配置为您完成。