/ / Iniezione delle dipendenze con unità in un progetto di libreria di classi - c #, .net, asp.net-mvc, dipendenza-iniezione, unità-contenitore

Iniezione di dipendenza con unità in un progetto di libreria di classi - c #, .net, asp.net-mvc, dipendenza-iniezione, unità-contenitore

Sono nuovo con il modello di iniezione di dipendenza. Sono un po 'confuso su poche cose.

Scenario:

Ho un progetto di libreria di classi chiamato "MailCore". Questo progetto ha interfacce e classi che eseguono tutte le cose che inviano email. Ho un progetto MVC chiamato "Il sito". Usa il progetto "MailCore" per inviare e-mail. Ho Unity in questo progetto e UnityContainer è registrato e le cose funzionano bene.

Ho anche un altro progetto di libreria di librerie di classichiamato "SiteRepo". A volte, per eseguire alcune attività specifiche, devo inviare email da questo progetto. Pertanto, anche in questo progetto viene fatto riferimento al progetto "MailCore".

Problema:

Ho installato Unity da NuGet nel progetto "SiteRepo" e non sembra che crei alcun UnityConfig in questo progetto di libreria di classi. Come potrei registrare un UnityContainer qui?

Codice:

Il sito:

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 (questo è nell'app Web "Il sito"):

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..
}
}

risposte:

5 per risposta № 1

Se tu dovere utilizzare un contenitore DI come Unity (anziché DI puro), dovresti installarlo nel tuo Radice di composizione, che è "Il sito".

Da lì, puoi fare riferimento ai progetti della biblioteca e configura il tuo contenitore.