gpt4 book ai didi

c# - 如何让 Ninject 2 为 LINQ to SQL DataContext 使用无参数构造函数?

转载 作者:可可西里 更新时间:2023-11-01 08:43:19 25 4
gpt4 key购买 nike

我已经开始在基于以下技术的项目中使用 Ninject 2(昨天从 Github 下载,包括 MVC 扩展项目):

  • .Net 3.5 Sp1
  • ASP.NET MVC 1.0
  • LINQ to SQL

这里没什么神奇的 - 我有一些存储库接口(interface)(命名为 IEntityRepository),它们是在运行时代码中使用 LINQ to SQL 实现的(并在单元测试代码中使用哈希表)。这些存储库中的每一个都需要一个来自 LINQ to SQL 的 DataContext 实例,以便与数据库对话,因此这是具体存储库类的构造函数参数。绑定(bind)设置如下:

Kernel.Bind<MyDataContext>().ToSelf().InRequestScope();

这样做的原因是,如果我碰巧需要更多实体,我希望能够在不同的存储库之间共享实体,并且使用 LINQ to SQL 数据上下文工作单元哲学,这对我来说似乎很有意义每个 HttpRequest 创建一个。

我通常为 MyDataContext 使用无参数构造函数 - 我不认为这是一种风险,因为它用于测试系统上的内部项目,因此数据上下文中的“内置”连接字符串是无害的。但是,由于 Ninject 2 是“贪婪的”并且需要带有 MOST 参数的构造函数,而且我无法真正将 [Inject] 参数以任何有意义的方式粘贴到生成的代码中,所以每当Ninject 尝试创建我的一个 Controller (它需要一个存储库,它需要数据上下文)。

我看到提到了 IConstructorScorer 以及制作“反转”的能力,它总是使用带有 LEAST 参数的构造函数,但是话又说回来,这将改变注入(inject)对其他一切的工作方式- 默认行为可能是我想要的,除了数据上下文。

那么 - 是否有一种简洁明了的方式来指定此绑定(bind)(且仅此绑定(bind))应使用特定的构造函数?我们可以像 Ninject 1 中那样对供应商做同样的事情,也许供应我们自己的“工厂”吗?还是我应该让步并尝试将参数馈送到有意义的数据上下文中?

最佳答案

我想您也可以使用“ToMethod”绑定(bind)来避免实现自定义提供程序,这就是我的使用方式:

Kernel.Bind<MyDataConext>().ToMethod(c => new MyDataContext())

关于c# - 如何让 Ninject 2 为 LINQ to SQL DataContext 使用无参数构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1158381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com