gpt4 book ai didi

asp.net-mvc-3 - 注入(inject) Controller 的服务类的依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-02 02:20:21 24 4
gpt4 key购买 nike

我目前正在开发一个使用 MVC3 的网络应用程序。 MVC3 项目通过服务层访问我们的应用程序逻辑。服务层使用通过 UnitOfWork 模式访问的存储库访问数据库。

我刚刚安装了 StructureMap 来负责将我的服务注入(inject)到 MVC3 项目中。示例 Controller 如下所示

public class AccountManagementController : Controller
{
IAccountService accountService;

public AccountManagementController(IAccountService accountService)
{
this.accountService = accountService;
}

现在,我的问题是我的 AccountService 类需要在结构图创建它时注入(inject) UnitOfWork。目前我通过 2 个 Controller 来处理这个问题。一个采用接口(interface),另一个实例化具体类。

public class AccountService : IAccountService, IDisposable
{
private IUnitOfWork unitOfWork;

internal AccountService(IUnitOfWork unitOfWork)
{
this.unitOfWork = unitOfWork;
}
public AccountService()
{
this.unitOfWork = new UnitOfWork();
}

这对我来说似乎是代码的味道。有没有更正确的方法来处理这个问题?

谢谢,弗里兹

最佳答案

正如 Mark 所建议的,我会删除默认构造函数,但是......

据我所知,StructureMap 总是选择具有最多参数的构造函数,因此在解析 IUnitOfWork 依赖项时这应该不是问题。

另一方面,IDisposable 在我看来就像一种气味。 AFAIK structureMap 建议如何处理这样的一次性实例:

  • 我们应该将一次性服务包装到非一次性服务中 wrapper 。非一次性包装器应该处理它的实例包装。
  • 我们应该将一次性服务工厂注入(inject)到非一次性包装器中。

在这两种情况下,我们向消费者注入(inject)包装器而不是直接注入(inject)一次性服务。

对于 structureMap,我们还可以利用嵌套容器功能,它跟踪一次性实例。因此,当嵌套容器被释放时,所有对象图都被释放。

关于asp.net-mvc-3 - 注入(inject) Controller 的服务类的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8524425/

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