class 库项目中的统一依赖注入
Dependency injection with unity in a class library project
我是依赖注入模式的新手。我对一些事情有点困惑。
场景:
我有一个名为 'MailCore' 的 class 库项目。这个项目有接口和 classes 来执行所有电子邮件发送的东西。
我有一个名为 'The site' 的 MVC 项目。它使用 'MailCore' 项目来发送电子邮件。我在这个项目中有 Unity,UnityContainer 已注册,一切正常。
我还有另一个 class 图书馆图书馆项目,名为 'SiteRepo'。有时,为了执行某些特定任务,我必须从该项目发送电子邮件。因此本项目也引用了'MailCore'项目。
问题:
我已经在 'SiteRepo' 项目中从 NuGet 安装了 Unity,它似乎没有在这个 class 库项目中创建任何 UnityConfig。
我如何在此处注册 UnityContainer?
代码:
网站:
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(这是在网络应用中 'The Site'):
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));
}
}
站点回购:
Public class JobRepo()
{
Public bool Create(...)
{
//some other code to create a job....
//have to send email using MailCore !! The problem area in concern..
}
}
如果你必须使用Unity之类的DI容器(而不是Pure DI), you should install it into your Composition Root,即'The site'。
从那里,您可以reference the library projects并配置您的容器。
我是依赖注入模式的新手。我对一些事情有点困惑。
场景:
我有一个名为 'MailCore' 的 class 库项目。这个项目有接口和 classes 来执行所有电子邮件发送的东西。 我有一个名为 'The site' 的 MVC 项目。它使用 'MailCore' 项目来发送电子邮件。我在这个项目中有 Unity,UnityContainer 已注册,一切正常。
我还有另一个 class 图书馆图书馆项目,名为 'SiteRepo'。有时,为了执行某些特定任务,我必须从该项目发送电子邮件。因此本项目也引用了'MailCore'项目。
问题:
我已经在 'SiteRepo' 项目中从 NuGet 安装了 Unity,它似乎没有在这个 class 库项目中创建任何 UnityConfig。 我如何在此处注册 UnityContainer?
代码:
网站:
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(这是在网络应用中 'The Site'):
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));
}
}
站点回购:
Public class JobRepo()
{
Public bool Create(...)
{
//some other code to create a job....
//have to send email using MailCore !! The problem area in concern..
}
}
如果你必须使用Unity之类的DI容器(而不是Pure DI), you should install it into your Composition Root,即'The site'。
从那里,您可以reference the library projects并配置您的容器。