首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >依赖注入-构造

依赖注入-构造
EN

Stack Overflow用户
提问于 2012-01-17 11:23:56
回答 1查看 195关注 0票数 2

我想知道我在这里的思路是否正确,我主要是为接口编程,所以我想知道下面的类是否应该通过DI注入,还是应该自己实例化一个类.

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

//IUserSession永远不知道,这取决于客户端应用程序,这是永远不知道的,所以我必须在任何时候注入。

我需要注入//IWorkflowService,因为客户端应用程序有几个不同的服务/包,这取决于业务规则可能有所不同

//IReadonlySession在我的应用程序中只有1,所以我从来不需要注射吗?在其他客户端调用中可能有所不同,但不太可能。

无论我说什么,//INotificationService永远都是一回事,所以我应该针对一个接口进行编程,而不是注入?

代码语言:javascript
复制
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被注入,因为这取决于我是否正在运行测试,我可能使用不同的数据库,或者我可能从不同的客户端应用程序调用我的代码(不太可能,但可能)

代码语言:javascript
复制
public Processor(IUserSession userSession, IWorkflowService workflowService,   IReadonlySession readonlySession)
        : base(workflowService)
    {
        _userSession = userSession;
        _readonlySession = readonlySession;
        _notificationService = new NotificationService();
    }

问题:

我对对象的实例化是否正确?我实施的方式正确吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-17 12:32:03

如果您仍然有一个与NotificationService的硬耦合,那么对接口编程几乎没有什么好处,所以我想说

INotificationService

  • or

  • 或向具体类

注入程序。

由于似乎有一些适当的默认值,所以应该考虑构造器链接

代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8893798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档