Sto costruendo un'applicazione ASP.NET MVC che utilizza un approccio DDD (Domain Driven Design) con accesso al database gestito da NHibernate. Ho classe del modello di dominio (Administrator) che voglio di iniettare una dipendenza in tramite un CIO contenitore come il Castello di Windsor, qualcosa di simile:Iniezione di dipendenze nelle classi del modello di dominio con Nhibernate (ASP.NET MVC + IOC)
public class Administrator
{
public virtual int Id { get; set; }
//.. snip ..//
public virtual string HashedPassword { get; protected set; }
public void SetPassword(string plainTextPassword)
{
IHashingService hasher = IocContainer.Resolve<IHashingService>();
this.HashedPassword = hasher.Hash(plainTextPassword);
}
}
Io fondamentalmente voglio iniettare IHashingService per il metodo SetPassword senza chiamare il CIO Container direttamente (perché si suppone che sia un pattern anti-IOC). Ma non sono sicuro di come farlo. Il mio oggetto Administrator viene istanziato tramite new Administrator();
o viene caricato tramite NHibernate, quindi come faccio a inserire IHashingService nella classe Administrator?
Ripensandoci, sto andando su questo nel modo giusto? Speravo di evitare di avere la mia base di codice disseminato ...
currentAdmin.Password = HashUtils.Hash(password, Algorithm.Sha512);
... e invece ottenere il modello di dominio in sé per prendersi cura di hashing e ordinatamente incapsulare via. Posso immaginare che un altro sviluppatore accidentalmente scelga l'algoritmo sbagliato e abbia alcune password come Sha512 e alcune come MD5, alcune con una salina, altre con un sale diverso ecc ecc. Invece se gli sviluppatori scrivono ...
currentAdmin.SetPassword(password);
... allora questo nasconderebbe quei dettagli e si prenderà cura di quei problemi sopra elencati non sarebbe?
Gli intercettori sembrano interessanti, darò una prova, grazie! –