1

抱歉,如果以前有人问过这个问题。我找不到类似的问题或帖子。

我有一个使用 Unity 作为 DI 框架的解决方案。

我最近试图理解 TDD 和 DI 的概念。希望这应该是我现在真正将事情转移到我的实际应用程序之前的最后一个问题。

我了解通过构造函数注入依赖项的概念,这就是我的 BLL 现在的样子:

BLL 类称为CarService,具有一种方法GetCarDetails

class CarService
{
   IRepository repository;

   CarService(IRepository repository)
   {
      this.repository = repository;
   }

   CarResponse GetCarDetails(CarRequest request)
   {
       CarResponse carResponse = new CarResponse();

       CarModel car = this.repository.SelectCarById(request.CarId);

       if(car!=null)
       {
           carResponse.Make = car.Make;
           carResponse.Reg = car.Reg;
       }

       return carResponse;

   }

}

在这个问题中使用 Composition Root (CR) 建议,我将我的 WebAPi 项目用作 CR 项目。我希望我的所有项目都只在 CR 中被引用,正如那个问题和这里所建议的那样

但是,与上面的示例代码一样,我需要在 CarService 中引用我的 DataContracts 和 Model Project 来执行以下操作:

CarResponse carResponse = new CarResponse();

CarModel car = this.repository.SelectCarById(request.CarId);

并接受 CarRequest 作为方法参数。

这样做可以吗?(这意味着 DataContracts 和 Model 项目不仅被 CR 引用,还被 CarService 引用)

或者这也应该通过某种 DI 技术来解决。如果是这样,怎么做?

4

1 回答 1

1

让您的服务层引用合同和模型是非常好的。您不应该为它们使用依赖注入。合同也可以在服务层和调用该服务的客户端之间共享(当然,如果它是一个 .NET 客户端)。

于 2013-07-29T11:21:56.263 回答