【问题标题】:Ninject DI - Placement of binding in an MVC3 applicationNinject DI - 在 MVC3 应用程序中放置绑定
【发布时间】:2012-09-04 17:53:24
【问题描述】:

我有一个非常分层的 MVC3 应用程序(域、服务、Web、基础设施等的单独项目)

我了解控制器构造函数注入的概念,MVC3 和 Ninject 可以很好地协同工作。但是对于与 web 层分离的层的注入呢?

例如,我有一个依赖于存储库接口的服务。服务是从控制器调用的,服务本身会被构造函数注入正确注入,但是存储库呢?我该如何注入?

public class MyService
{
  protected virtual IPersonRepository PersonRepository {get; set;}

  public virtual void UseRepository()
  {
    PersonRepository.FindEveryoneInTheWorldButDontReturnThem();
  }
}

在上面的示例中,我应该在哪里/如何[n]注入存储库?

忍者 3.0 Ninject.Web.MVC 3.0

【问题讨论】:

    标签: asp.net-mvc dependency-injection inversion-of-control ninject


    【解决方案1】:

    通过构造函数注入注入存储库,您的 IoC 容器 (Ninject) 将处理依赖链(即,当您将 MyService 作为依赖注入时,它的任何依赖也将由容器解析,它们的依赖等等开)

    public MyService(IPersonRepository personRepository)
    {
        this.PersonRepository = personRepository;
    }
    

    【讨论】:

    • 不也有[Inject]属性可以使用吗?
    • 我问的原因是因为我的存储库中有一个也必须解决的依赖项。但是,要求所有存储库对依赖项使用构造函数注入似乎有点不需要。
    • 阅读github.com/ninject/ninject/wiki/Injection-Patterns。 “如果没有构造函数具有 [Inject] 属性,Ninject 将选择 Ninject 理解如何解析的具有最多参数的构造函数。如果没有定义构造函数,Ninject 将选择默认的无参数构造函数(假设有一个)。”跨度>
    • 如果它们是必需的依赖项,那么通过构造函数注入它们是完全合理的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多