gpt4 book ai didi

dependency-injection - 使用 Angular 2 注入(inject)与全局静态类

转载 作者:太空狗 更新时间:2023-10-29 17:02:48 24 4
gpt4 key购买 nike

我正在创建一个项目,我需要一个“常量”类来包含一些配置值。这是此类的摘录:

export class Constants
{
static Configuration = class
{
static CookieName:string = 'etl_language';
};

...

static View = class
{
static Militaries:string = 'militaries';
static Mutants:string = 'mutants';
static Objects:string = 'objects';
static Scientists:string = 'scientists';
};
}

当我在使用 Angular 2 的组件中时,我可以通过导入它来使用该类:

import {Constants} from "../../misc/constants";

然后,只需引用它:

this.cookieName = Constants.Configuration.CookieName;

它工作得很好,但我觉得我应该使用 Angular 2 的依赖注入(inject)引擎在构造函数中注入(inject)对该类的引用,但这似乎有点过分了。但是,我觉得我违反了做事的“Angular 方式”,所以我不知道我是否可以坚持我的解决方案,或者我是否必须使用 DI。

有什么建议吗?

最佳答案

我可能建议做的是将您的 Constants 类更改为具有只读属性,并像这样从它们创建一个 Providers[]

@Injectable()
public class ConfigurationConstants() {
private _cookieName:string = 'etl_language';
...
get cookieName():string {
return this._cookieName;
}
...
}

export var CONSTANTS_PROVIDERS:Provider[] = [
provide(ConfigurationConstants, {useClass: ConfigurationConstants}),
provide(ViewConstants, {useClass: ViewConstatns})
];

然后您可以将这些提供程序引导到您的应用程序的顶级注入(inject)器中,使它们在您可能需要的任何地方都可用。

import {CONSTANTS_PROVIDERS} from './constants';

bootstrap(App, [CONSTANTS_PROVIDERS])
.catch(err => console.error(err));

这里有一个例子可以证明:http://plnkr.co/edit/RPjDxoIZ8wLY3DDIdhJF

编辑 2:Plunker 现在回来了,我已经更新了示例

编辑:Plunkr 现在已经死了,所以我无法更新它,但在我的评论中我的意思是这样的(我没有测试过这个但它应该可以工作):

public class SubConstants() {
private _someString:string = 'Some String';
...
get someString():string {
return this._someString;
}
...
}

@Injectable()
public class ConfigurationConstants() {
private _cookieName:string = 'etl_language';
private _subConstants:SubConstants = new SubConstants();
...
get cookieName():string {
return this._cookieName;
}

get subConstants():SubConstants {
return this._subConstants;
}
...
}

// ... this would allow you to then do:
confConstants.subConstants.someString
// assuming you injected ConfigurationConstants as confConstants

同样,这比您建议的内部类的代码更多,因此可能取决于您的喜好。

关于dependency-injection - 使用 Angular 2 注入(inject)与全局静态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34404507/

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