Внедрение зависимостей в классы доменной модели с помощью 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);

... тогда это скрыло бы эти детали и решило бы проблемы, перечисленные выше, не так ли?

Ответы на вопрос(4)

Ваш ответ на вопрос