gpt4 book ai didi

.net - 依赖注入(inject) - 构造

转载 作者:行者123 更新时间:2023-12-04 06:01:03 27 4
gpt4 key购买 nike

我想知道我在这里的想法是否正确,我主要针对接口(interface)进行编程,所以我想知道下面的类是否应该通过 DI 注入(inject),或者我应该自己实例化一个类...

注意:这些服务保存在我的核心 libaray 中,而不是我的网络应用程序(asp.net mvc)中

//用户 session 永远不知道,这取决于客户端应用程序,这永远不知道,所以我必须始终注入(inject)

//工作流服务我需要注入(inject),因为客户端应用程序有一些不同的服务/包,这取决于业务规则可能会有所不同

// IReadonlySession 我的应用程序中只有 1,所以我永远不需要注入(inject)?在其他客户端调用中可能会有所不同,但不太可能

// INotificationService 将永远是我所说的,它永远是一回事,所以我应该针对接口(interface)编程而不是注入(inject)?

private readonly IUserSession _userSession;
private readonly IReadOnlySession _readonlySession;
private readonly INotificationService _notificationService;

public Processor(IUserSession userSession, IWorkflowService workflowService)
: base(workflowService)
{
_userSession = userSession;
_readonlySession = new ReadonlySession();
_notificationService = new NotificationService();
}

// IReadonlySession 被注入(inject),因为这可能会根据我是否正在运行测试而改变,我可能会使用不同的数据库,或者我可能会从不同的客户端应用程序调用我的代码(不太可能但可能)
public Processor(IUserSession userSession, IWorkflowService workflowService,   IReadonlySession readonlySession)
: base(workflowService)
{
_userSession = userSession;
_readonlySession = readonlySession;
_notificationService = new NotificationService();
}

问题:

我的对象实例化是否正确?我实现它的方式是否正确?

最佳答案

如果您仍然与 NotificationService 有硬耦合,那么针对接口(interface)进行编程几乎没有什么好处,所以我想说

  • 要么注入(inject) INotificationService
  • 或针对具体类的程序

  • 由于似乎有一些适当的默认值,您应该考虑 构造函数链 :
    public Processor(IUserSession userSession, IWorkflowService workflowService)
    : this(userSession, workflowService, new ReadonlySession()) { }

    public Processor(IUserSession userSession,
    IWorkflowService workflowService, IReadonlySession readonlySession)
    : base(workflowService)
    {
    _userSession = userSession;
    _readonlySession = readonlySession;
    _notificationService = new NotificationService();
    }

    这将为您的图书馆的使用者提供一种简单的入门方式,而不会限制高级用户。

    您可能还想使用此处概述的 Facade 解决方案: Dependency Inject (DI) "friendly" library

    关于.net - 依赖注入(inject) - 构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8893798/

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