0

我有一个三层的项目。

第一个是 DAL

第二个是域

第三个是介绍

我在我的域层(ICategoryRepository)中创建了一个接口,这里是代码

public interface ICategoryRepository
{
    List<CategoryDTO> GetCategory();
}

我在我的 DAL 中创建了一个类来实现我的域中的 ICategoryRepository。

public class CategoryRepository : ICategoryRepository
{                     
    BookInfoContext _context;

    public List<CategoryDTO> GetCategory()
    {
        _context = new BookInfoContext();

        var categoryDto = _context.Categories
                            .Select(c => new CategoryDTO
                            {
                                CategoryId = c.CategroyId,
                                CategoryName = c.CategoryName
                            }).ToList();
        return categoryDto;
    }
}

然后我在我的域中创建一个类,并将 ICategoryRepository 作为参数传递给我的构造函数。

public class CategoryService
{

    ICategoryRepository _categoryService;

    public CategoryService(ICategoryRepository categoryService)
    {
        this._categoryService = categoryService;
    }

    public List<CategoryDTO> GetCategory()
    {
        return _categoryService.GetCategory();
    }
}

我这样做是为了反转控制。而不是我的域将依赖于 DAL,我反转了控件,以便 myDAL 将依赖于我的 DOMAIN。

我的问题是,每次我在表示层中调用 CategoryService 时,我都需要将 ICategoryRepository 作为 DAL 中的构造函数的参数传递。我不希望我的表示层依赖于我的 DAL。

有什么建议吗?

谢谢,

4

1 回答 1

1

您可以使用依赖注入。在 asp.net mvc 中,我们有一个IDepencyResolver接口,可以注入对控制器依赖项及其依赖项的依赖项。为此,您需要一个容器来轻松注入您的依赖项,例如示例、MS Unity、Ninject 等。并将容器上的所有类型注册到它知道如何解决您的依赖项。

使用 aContainerDependencyResolver设置,您可以依赖service于您的controller,例如:

public class CategoryController
{
   private readonly ICategoryService _categoryService;

   // inject by constructor..
   public CategoryController(ICategoryService categoryService)
   {
       _categoryService = categoryService;
   }


   public ActionResult Index()
   {
      var categories = _categoryService.GetCategory();

      return View(categories);
   }

}

在这种情况下,容器将看到控制器需要该服务,而该服务需要一个存储库。它将为您解决所有问题,因为您已经注册了这些类型。

看看这篇文章:http: //xhalent.wordpress.com/2011/01/17/using-unity-as-a-dependency-resolver-asp-net-mvc-3/

于 2013-07-19T11:29:25.593 回答