Ad esempio, memorizzo "utente corrente" in Session. L'oggetto del livello aziendale viene istanziato da Unity. Come faccio a rendere l'oggetto del livello aziendale consapevole dell '"utente corrente"?Come si inserisce un oggetto specifico della richiesta HTTP nell'oggetto Unity fornito?
6
A
risposta
13
Si dovrebbe nascondere il "utente corrente" dietro un'astrazione:
public interface ICurrentUser
{
string Name { get; }
}
Questa astrazione dovrebbe essere definito nel livello di business e avete bisogno di creare un'implementazione specifica ASP.NET che si inserisce nel Composition Root:
public class AspNetCurrentUser : ICurrentUser
{
public string Name
{
get { return HttpContext.Current.Session["user"]; }
}
}
Ora il vostro oggetto di business-layer può dipendere l'interfaccia ICurrentUser
, e in Unity è possibile registrare l'applicazione come segue:
container.RegisterType<ICurrentUser, AspNetCurrentUser>();
Esiste comunque lo scopo senza utilizzare proprietà statiche? Fondamentalmente se voglio basarlo su HttpRequestContext o sul Controller stesso, come faccio? –
@CharlesPrakashDasari: fai una nuova domanda [qui] (https://stackoverflow.com/questions/ask) e pubblica un link a tale domanda come commento a questa risposta. – Steven