相关疑难解决方法(0)

使用NHibernate对象进行依赖注入

我想知道如何告诉NHibernate解决我的POCO域对象的依赖关系.

我发现像CalculateOrderTax这样的方法应该在Domain对象中,因为它们编码特定于域的业务规则.但是,一旦我有两个违反SRP的话.

将这些方法提取到Strategy类是没有问题的,但我想知道如何使NHibernate加载它们.

在将对象移交给更高层之前,循环访问存储库中的对象列表以进行基于Dependecy注入的获取/设置似乎不是一个好的解决方案.

我现在也在使用Castle Windsor进行Depency注射.

nhibernate dependency-injection

8
推荐指数
1
解决办法
4938
查看次数

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

我正在构建一个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)

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

nhibernate asp.net-mvc castle-windsor ioc-container inversion-of-control

7
推荐指数
1
解决办法
3381
查看次数