【问题标题】:Ninject in a three tier application三层应用程序中的 Ninject
【发布时间】:2013-02-09 07:13:01
【问题描述】:

我正在构建一个标准的三层应用程序。

1 个用于前端的控制台应用

2 业务逻辑层

3 数据层

主要目的是显示数据库表中的一些客户数据。

我试图遵循“.NET 中的依赖注入”一书中的指导方针,没有从控制台到数据层的引用,也没有从业务层到数据层的引用。如果需要,可以轻松交换前端和数据层。

假设我在业务层有一个名为 CustomerService 的服务,它有一个 GetCustomers() 方法

CustomerService 的构造函数采用 ICustomerRepository 就像这样

 public class CustomerService 
 {
     ICustomerRepository repository; 

     public CustomerService(ICustomerRepository repository) 
     {
        this.repository = repository;
     }

     public ICollection<Customer> GetCustomers() 
     {
         return repository.GetCustomers();
     }
}

在数据层我有

public class CustomerRepository : BLL.ICustomerRepository 
{
    public ICollection<Customer> GetCustomers()
    {
         // get the customers from the db 
         return customers;
    }
}

在控制台应用程序中,我想使用 Ninject 调用创建 CustomerService 对象来满足 ICustomerRepository 依赖项。

 class DIModule : NinjectModule
 {
    public override void Load()
    {
        Bind<>(ICustomerRepository).To<??????????????>()
    }
 }

如何绑定到数据层 CustomerRepository 类?我必须将控制台应用程序的引用添加到数据层才能正常工作? 我做错了什么?

【问题讨论】:

    标签: c# dependency-injection inversion-of-control ninject n-tier-architecture


    【解决方案1】:
    Bind<ICustomerRepository>().To<CustomerRepository>();
    

    【讨论】:

    • 这不需要我的控制台应用程序引用我的数据层吗?我想避免这种情况。
    • @tom:IoC 只是抽象层。注册依赖项时,您需要对合约(接口)和服务(实现)的引用,因此需要引用包含两者的程序集。那么你永远不会在任何地方使用具体的类类型。
    • stackoverflow.com/questions/12994507/… 中遇到过类似的情绪,但还是习惯了 DI。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    相关资源
    最近更新 更多