使用Nhibernate将依赖项注入域模型类(ASP.NET MVC + IOC)

Sun*_*oot 7 nhibernate asp.net-mvc castle-windsor ioc-container inversion-of-control

我正在构建一个ASP.NET MVC应用程序,它使用DDD(域驱动设计)方法,由NHibernate处理数据库访问.我有域模型类(管理员),我想通过一个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<IHashingService>();

        this.HashedPassword = hasher.Hash(plainTextPassword);
    }
}
Run Code Online (Sandbox Code Playgroud)

我基本上想要为SetPassword方法注入IHashingService而不直接调用IOC容器(因为这被认为是IOC反模式).但我不知道如何去做.我的Administrator对象要么通过实例化,new Administrator();要么通过NHibernate加载,那么我如何将IHashingService注入Administrator类?

再想一想,我是否正确地走这条路?我希望避免让我的代码库乱丢......

currentAdmin.Password = HashUtils.Hash(password, Algorithm.Sha512);
Run Code Online (Sandbox Code Playgroud)

...而是让域模型本身处理哈希并巧妙地将其封装起来.我可以设想另一个开发人员意外地选择了错误的算法,并且有一些密码为Sha512,有些是MD5,有些有一个盐,有些有不同的盐等等.相反,如果开发人员正在写...

currentAdmin.SetPassword(password);
Run Code Online (Sandbox Code Playgroud)

...然后那会隐藏这些细节并处理上面列出的那些问题不是吗?