MST

星途 面试题库

面试题:TypeScript属性装饰器在依赖注入中的应用

假设你正在开发一个基于TypeScript的Web应用,需要实现依赖注入功能。请使用属性装饰器来实现一个简单的依赖注入机制,使得在类的属性上使用装饰器后,能自动注入对应的依赖实例。请阐述设计思路并给出关键代码示例。
26.1万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 创建一个依赖容器:用于存储依赖实例。
  2. 定义属性装饰器:在装饰器函数中,从依赖容器中获取对应的依赖实例并注入到类的属性上。

关键代码示例

// 依赖容器
const dependencyContainer: { [key: string]: any } = {};

// 注册依赖
function registerDependency(key: string, instance: any) {
    dependencyContainer[key] = instance;
}

// 依赖注入装饰器
function inject(key: string) {
    return function (target: any, propertyKey: string) {
        let value: any;
        Object.defineProperty(target, propertyKey, {
            get() {
                if (!value) {
                    value = dependencyContainer[key];
                }
                return value;
            },
            set(newValue) {
                value = newValue;
            },
            enumerable: true,
            configurable: true
        });
    };
}

// 示例依赖类
class ExampleDependency {
    sayHello() {
        return 'Hello from ExampleDependency';
    }
}

// 注册依赖
registerDependency('exampleDependency', new ExampleDependency());

// 使用依赖注入的类
class MyClass {
    @inject('exampleDependency')
    myDependency: ExampleDependency;

    doSomething() {
        return this.myDependency.sayHello();
    }
}

const myClass = new MyClass();
console.log(myClass.doSomething());