【问题标题】:Angular 6 injecting service into class without using the constructorAngular 6将服务注入类而不使用构造函数
【发布时间】:2020-06-03 09:46:18
【问题描述】:

使用 Angular 6 和 Typescript 2.7。我有一个带有构造函数的类,当我从控制器创建实例时,我将参数传递给它。这个类还有一个需要注入的服务。但是随后创建实例的控制器需要将服务作为参数提供。这是常见的还是有办法只在类中注入服务而不是构造函数。我在其他帖子中读到构造函数只能用于注入依赖项。

所以我有一个接受简单字符串参数的配置类。

export class Configuration{
    //public uiService: UiService;
    public configName:string;
    public configType: ConfigType;
    public shape:any;

    constructor(_configName: string, _configType: ConfigType){
        this.configName = _configName;
        this.configType = _configType;
....

我从我的控制器创建这个类的一个新实例,如下所示:

let config = new Configuration("NEWconfiguration", configType);

我有一个公共服务,其中包含我需要在配置类中使用的实用程序功能。阅读这里和其他网站,我发现这应该通过构造函数注入。因此,我的配置构造函数将包含服务的新参数,然后控制器将注入它。但是该服务未在控制器中使用,因此我不想将其包含在其中。

Configuration 类中有没有一种方法可以在不使用构造函数的情况下访问服务?或者这是不好的做法。我想我可以在 Configuration 类中创建服务的实例,或者使服务中的函数成为静态的,但是我没有使用依赖注入。这有关系吗?

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    我最近遇到了一个类似的问题,我必须创建同一个类的多个实例,而 Angular DI 无法做到这一点,它默认创建单例。然而,类实例确实依赖于我的应用程序中的其他服务。

    我解决它的方法是将依赖项注入到我的控制器中,并使用它们的构造函数实例化类,而无需 DI。

    让我知道以上是否足够,如果不够,我可以添加示例代码以提高清晰度。

    【讨论】:

    • 所以你的构造函数就像这个构造函数(myCommonService:CommonService, configName:string){... 你这样称呼它 new MyClass(instanceOfMyService, "newConfig"){... 在哪里您注入 CommonService 的控制器。
    • 没错。我理解在你的控制器中注入一些只在另一个类中使用的东西的担忧,但在某些时候你必须挂钩到 DI 系统。
    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2020-11-09
    • 2018-09-27
    • 1970-01-01
    • 2016-11-16
    相关资源
    最近更新 更多