Seguendo il consiglio che ho ricevuto in questo thread [Ninject UOW pattern, new ConnectionString after user is authenticated ora capisco che non dovrei usare la seguente riga ...Come NON utente DependencyResolver.Current.GetService (...) in questa situazione/
var applicationConfiguration =
(IApplicationConfiguration)
DependencyResolver.Current.GetService(typeof(IApplicationConfiguration));
... come localizzatore di servizio è un anti-pattern.
Ma nel caso della seguente procedura come posso istanziare il mio oggetto concreto che implementa "IApplicationConfiguration" in modo che posso usare l'oggetto per ottenere il nome del ruolo utente sconosciuto, o usarlo per assegnare al "ApplicationConfiguration "proprietà del mio principio?
Codice Global.asax
public class MvcApplication : NinjectHttpApplication
{
/// <summary>
/// Handles the PostAuthenticateRequest event of the Application control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
String[] roles;
var applicationConfiguration =
(IApplicationConfiguration)
DependencyResolver.Current.GetService(typeof(IApplicationConfiguration));
var identity = HttpContext.Current.User.Identity;
if (Request.IsAuthenticated)
{
roles = Roles.GetRolesForUser(identity.Name);
}
else
{
roles = new[] { applicationConfiguration.UnknownUserRoleName };
}
var webIdentity = new WebIdentity(identity, roles);
var principal = new WebsitePrincipal(webIdentity)
{
ApplicationConfiguration = applicationConfiguration
};
HttpContext.Current.User = principal;
}
.
.
.
}
Risoluzione Mapping
public class ApplicationConfigurationContractMapping : NinjectModule
{
public override void Load()
{
Bind<IApplicationConfiguration>()
.To<ApplicationConfiguration>();
}
}
ApplicationConfiguration
public class ApplicationConfiguration : IApplicationConfiguration
{
.
.
.
.
}
Sto usando Ninject come framework Injection della dipendenza. Ogni suggerimento è apprezzato.
EDIT: codice completo può essere visto qui: https://github.com/dibley1973/Dibware.Template.Presentation.Web
Oooh che sembra piuttosto dolce, grazie. Darò quel andare e feedback. – Dib
Che funziona a meraviglia e sembra bello e pulito. Grazie – Dib