小编mgi*_*bas的帖子

构造函数注入 - 在哪里调用?

我对构造函数注入模式和规则有点困惑不要调用容器; 它会打电话给你.

有人可以解释我(也许还有其他人)真正的应用程序如何使用构造函数注入获得所有DI优势?我给出了一些简单的,我认为常见的例子:

DomainObject
RepositoryObject
DaoObject
Run Code Online (Sandbox Code Playgroud)

关系很明显(我认为) - RepositoryObject需要DaoObject,DomainObject需要Repository.

使用构造函数注入我假设我可以忘记(在大多数情况下)关于NEW关键字,但是何时,何地以及如何创建新对象(主要是域)?我必须为所有班级写工厂吗?我应该在那家工厂参考DI Container吗?

最好的将是当有人向我展示一些真实的应用程序示例(请不要Asp.Net MVC :))或草绘一些项目结构.

.net dependency-injection constructor-injection

5
推荐指数
1
解决办法
466
查看次数

带有lambda表达式的Moq TargetParameterCountException

我有一个奇怪的问题:当我使用mu存储库存根时,我得到奇怪的异常:

System.Reflection.TargetParameterCountException

创建存根(在测试方法中):

var repositoryStub = new Mock<IRepository<User>>();
repositoryStub.Setup(m => m.FindAll(It.IsAny<Expression<Func<User,bool>>>())).Returns(TestGlobals.TestUsers.AsQueryable<User>);
Run Code Online (Sandbox Code Playgroud)

接口:

IQueryable<T> FindAll(System.Linq.Expressions.Expression<Func<T, bool>> whereExpression);
Run Code Online (Sandbox Code Playgroud)

并且每次调用FindAll都会抛出错误:(我在很多其他地方以那种方式嘲笑,但现在我找不到那个奇怪问题的来源:(

c# lambda nunit moq

4
推荐指数
1
解决办法
1939
查看次数

每个实体一项服务?

再次 - 我对DDD事情感到困惑:)

我有architeture(我还在努力),简短的看起来像这样:

DataLayer:
 EntityDao -> Implementing domain layer interfaces (NHibernate)
DomainLayer:
 EntityRepository -> Repository for each entity with injected Dao
 DomainObjects/Entitys -> Some logic
UI
 ASP.Net MVC
Run Code Online (Sandbox Code Playgroud)

我现在正处于创建和使用某些Service类的那一点.我有一些问题:

1.我应该为每个实体/域对象创建至少一个服务吗?

2.a.Should服务有"查询"方法,如Find,FIndAll,FindAll(LINQQuery)?

2.b.我应该停止在上层(UI)中使用Repositorys来获取实体的集合("类似于查找"的方法)并开始只使用服务吗?

3.如果回答2问题是否 - 我应该以并行方式使用服务和存储库(在UI中我只需要获取所有实体我使用Repository.FindAll,当我需要获得该实体的一些"逻辑"列表时使用Service.FindXXX方法)?

4.我在某种程度上认为Repositorys不适合Domain层 - 我应该以某种方式将它们分开并在DOMAIN中只留下像Entity和Services这样的域特定对象吗?如果是 - 给我一些结构示例如何实现.

一些对象的例子:

道:

public class NHibernateDao<T> : IDao<T>
{
    public NHibernateDao() { }

    public T Get(object id)
    {
        T entity = (T)NHibernateSession.Get(entityType, id);
        return entity;
    }
    public T Load(object id)
    {
        T entity = (T)NHibernateSession.Load(entityType, id);
        return entity;
    }
    public …
Run Code Online (Sandbox Code Playgroud)

architecture design-patterns domain-driven-design

1
推荐指数
2
解决办法
2329
查看次数