面试题答案
一键面试- 首先,定义一个装饰器工厂函数来创建依赖注入装饰器:
function inject<T>(service: T) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
return originalMethod.apply(this, [service, ...args]);
};
return descriptor;
};
}
- 然后,定义一个服务接口和具体的服务类:
// 服务接口
interface MyService {
doSomething(): string;
}
// 具体服务类
class MyServiceImpl implements MyService {
doSomething(): string {
return 'Service is doing something';
}
}
- 接着,定义需要依赖注入的类和方法:
class MyClass {
@inject(new MyServiceImpl())
myMethod(service: MyService, otherArg: string) {
return service.doSomething() + ' and ' + otherArg;
}
}
- 最后,测试依赖注入:
const myInstance = new MyClass();
console.log(myInstance.myMethod('extra argument'));
以上代码实现了一个简单的依赖注入机制,使用inject
装饰器在调用myMethod
时动态注入MyService
实例,并通过TypeScript确保类型安全。