Внедрение зависимостей в классы доменной модели с помощью Nhibernate (ASP.NET MVC + IOC)
m создание приложения ASP.NET MVC, в котором используется подход DDD (Domain Driven Design) с доступом к базе данных, обрабатываемым NHibernate. У меня есть класс модели домена (Administrator), в который я хочу внедрить зависимость через контейнер IOC, такой как Castle Windsor, что-то вроде этого:
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();
this.HashedPassword = hasher.Hash(plainTextPassword);
}
}
Я в основном хочу внедрить IHashingService для метода SetPassword без непосредственного вызова контейнера IOC (поскольку предполагается, что это анти-шаблон IOC). Но я'Я не уверен, как это сделать. Мой объект администратора либо создается с помощьюnew Administrator();
или он загружается через NHibernate, так как бы я внедрить IHashingService в класс администратора?
Если подумать, я иду по этому пути правильно? Я надеялся избежать засорения моей кодовой базы ...
currentAdmin.Password = HashUtils.Hash(password, Algorithm.Sha512);
... и вместо этого заставьте саму модель предметной области заботиться о хешировании и аккуратно ее инкапсулировать. Я могу предположить, что другой разработчик случайно выберет неправильный алгоритм и будет иметь несколько паролей, например, Sha512, и некоторые, например, MD5, некоторые с одной солью, некоторые с другой солью и т. Д. И т. Д. Вместо этого, если разработчики пишут ...
currentAdmin.SetPassword(password);
... тогда это скрыло бы эти детали и решило бы проблемы, перечисленные выше, не так ли?