在类库项目中统一依赖注入

时间:2015-06-16 20:06:28

标签: c# .net asp.net-mvc dependency-injection unity-container

我是依赖注入模式的新手。我对一些事情感到有些困惑。

情景:

我有一个名为' MailCore'的类库项目。该项目具有执行所有电子邮件发送内容的接口和类。 我有一个名为' The site'的MVC项目。它使用' MailCore'项目发送电子邮件。我在这个项目中使用了Unity,UnityContainer已经注册,工作正常。

我还有另一个名为“SiteRepo'”的类库库项目。有时,为了执行某些特定任务,我必须从该项目发送电子邮件。因此,' MailCore'项目也在这个项目中被引用。

问题:

我已经在NuGet中安装了Unity的SiteRepo'项目并没有在这个类库项目中创建任何UnityConfig。 我如何在这里注册UnityContainer?

代码:

TheSite:

Public class JobController : Controller
{
    private readonly IEmailBuilder mailBuilder;
    public JobController(IEmailBuilder mailBuilder)
    {
        this.mailBuilder = mailBuilder;

    }
    public ActionResult Create(....)
    {
      JobRepo j = new JobRepo();
      j.Create(....);
    }

}

UnityConfig(这是在网络应用程序'网站'):

public static class UnityConfig
{
    public static void RegisterComponents()
    {
        var container = new UnityContainer();

        // register all your components with the container here
        // it is NOT necessary to register your controllers

        // e.g. container.RegisterType<ITestService, TestService>();

        container.RegisterType<IEmailBuilder, EmailBuilder>();

        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
    }
}

SiteRepo:

Public class JobRepo()
{
   Public bool Create(...) 
   {
       //some other code to create a job....

       //have to send email using MailCore !! The problem area in concern..
   }
}

1 个答案:

答案 0 :(得分:5)

如果你必须使用像Unity这样的DI容器(而不是Pure DI),你应该将它安装到你的Composition Root,这是&#39;网站&# 39;

从那里,您可以reference the library projects并配置您的容器。