模型的依赖注入



我相信以前有人问过这个问题,但我正在努力寻找。

我正在使用Ninject从我的控制器中删除依赖项,以及存储库设计模式。

在我看来,这种方法的好处之一是,我可以轻松地将我的存储库和领域实体分开,并在我愿意的情况下使用另一个程序集。因此,我将域实体和存储库保存在外部程序集中,并且可以从接口模拟所有依赖项。

看起来,虽然我可以在大多数地方使用接口来引用我的领域实体,但当涉及到模型绑定时,我必须使用对具体类的引用。我已经读到,这是与序列化,我理解,但唯一的方法来避免引用领域实体创建单独的模型?

我可以用自定义模型绑定做什么?

背景介绍:我是一名经验丰富的ASP.net开发人员,但刚接触MVC。

视图模型应该是没有逻辑的纯数据容器,因此不应该有任何依赖关系。相反,将存储库注入到控制器中,并让控制器将存储库中所需的数据分配给视图模型的适当属性。

使用依赖注入框架的主要优点是IoC(控制反转):

    松散耦合
  • <
  • 更多的灵活性/gh><
  • 容易em>测试
所以我们通常做的是通过接口注入存储库,比如

public class MyController : Controller
{
    private IPersonRepository personRepo;
    public MyController(IPersonRepository personRepo)
    { 
        this.personRepo = personRepo;
    }
    ...
}

在测试期间,这允许轻松注入我的模拟存储库,它返回我想要测试的那些值。

注入域实体没有多大意义,因为它们与特定类/控制器中的功能更紧密地联系在一起,因此进一步抽象它们只会增加开销而不是带来好处。相反,如果你想将实际的实体模型与控制器解耦,你可以看看MVVM模式,创建专门的"ViewModels"。

只要考虑控制器的可测试性:"我想模拟什么来单元测试它?"

  • 数据库访问->存储库
  • 外部依赖项->其他BL类,WS调用等

我不会在这里包括域实体,因为它们通常只是一个数据容器

更多细节会有所帮助。也许是一段代码?

首先,您应该避免将依赖项注入域实体,而是使用域服务。

更多信息在这里。

编辑001:

我想我们应该澄清一下术语。领域层包含所有领域实体,例如产品、类别等。然后是数据层,你的存储库为你的领域实体提供水合物,然后你有一个服务层,你的应用程序服务与数据层通信。

最后,你有一个包含视图和控制器的表示层。控制器与你的应用服务层对话。因此,产品控制器与目录服务(例如getproductysku)进行通信。目录服务将有一个或多个存储库注入到它的构造函数中(iproductrerepository、ICategoryRepository等)。在asp.net mvc中,ViewModels也很常见。把ViewModels放到你的应用服务层

所以我不确定你说的"模型"one_answers"领域实体"是什么意思,但我希望这能澄清术语。

相关内容

  • 没有找到相关文章

最新更新