Typescript 在Aurelia中按类型从容器请求类型?

Typescript 在Aurelia中按类型从容器请求类型?,typescript,aurelia,Typescript,Aurelia,在使用Spring的Java中,如果我想让一个实例知道可以处理它的东西,我会写这样的东西 interface Executable<T extends Executor> { Class<T> executorClass(); } Executable instance = () -> MyExecutor.class; Class<T> execClazz = instance.executorClass(); T executor = con

在使用Spring的Java中,如果我想让一个实例知道可以处理它的东西,我会写这样的东西

interface Executable<T extends Executor> {
   Class<T> executorClass();
}

Executable instance = () -> MyExecutor.class;
Class<T> execClazz = instance.executorClass();
T executor = context.getBean( execClazz );
Results r = executor.execute( instance );

我可以用这个图案搭配Aurelia和Typescript吗?如果是这样的话,我该如何在Typescript中定义executorClass的返回类型?我不知道他们对类使用了什么,也不知道如何简单地返回它。如何从Aurelia的容器中获取类型?

您可以使用get方法从容器中请求类型的实例:

福班{ } 设foo=container.getFoo;//返回Foo的一个实例。 在TypeScript中,您可能希望强制转换get方法的结果:

福班{ } 设foo=container.getFoo;//返回Foo的一个实例。 如果您有多个实现特定接口的类型,请在应用程序启动时注册相应的实现:

//接口 班级餐饮服务{ 承诺{ 抛出新错误“未实现”; } } 类HttpFooService{ 承诺{ 回传https://api.evilcorp.com/foos' .thenresponse=>response.json; } } 类MockFooService{ 承诺{ 返回承诺。解决[new Foo]; } } //应用程序启动。。。配置容器。。。 如果测试{ container.registerHandlerFooService,c=>c.getMockFooService; //或:container.registerinstancefoservice,新MockFooService; }否则{ container.registerHandlerFooService,c=>c.getHttpFooService; //或:container.registerinstancefoservice,新的HttpFooService; } //现在,当您@injectFoo或container.getFoo时,您将获得MockFooService或HttpFooService的实例,具体取决于您注册的内容。 设foo=container.getFoo;//返回MockFooService/HttpFooService的实例。 我不确定这是否完全回答了你的问题。我从未使用过Spring,也有一段时间没有做过任何Java编程。我没有完全理解你问题中的代码。多个可能有用的容器/DI用例。这是另一个可能有用的方法。这是奥雷莉亚·迪

作为旁注,请远离容器。尽可能靠近容器。使用它违反了依赖倒置原则。列出依赖项比主动检索依赖项更好:

良好的ES6:

@酒吧 Baz类{ 建筑工人{ } } 好的打字稿:

@自动注入 Baz类{ 构造器Foo:Foo,bar:bar{ } } 不太好:

Baz类{ 建造师{ 设foo=container.getFoo; 让bar=container.getBar; } }
您可以使用get方法从容器中请求类型的实例:

福班{ } 设foo=container.getFoo;//返回Foo的一个实例。 在TypeScript中,您可能希望强制转换get方法的结果:

福班{ } 设foo=container.getFoo;//返回Foo的一个实例。 如果您有多个实现特定接口的类型,请在应用程序启动时注册相应的实现:

//接口 班级餐饮服务{ 承诺{ 抛出新错误“未实现”; } } 类HttpFooService{ 承诺{ 回传https://api.evilcorp.com/foos' .thenresponse=>response.json; } } 类MockFooService{ 承诺{ 返回承诺。解决[new Foo]; } } //应用程序启动。。。配置容器。。。 如果测试{ container.registerHandlerFooService,c=>c.getMockFooService; //或:container.registerinstancefoservice,新MockFooService; }否则{ container.registerHandlerFooService,c=>c.getHttpFooService; //或:container.registerinstancefoservice,新的HttpFooService; } //现在,当您@injectFoo或container.getFoo时,您将获得MockFooService或HttpFooService的实例,具体取决于您注册的内容。 设foo=container.getFoo;//返回MockFooService/HttpFooService的实例。 我不确定这是否完全回答了你的问题。我从未使用过Spring,也有一段时间没有做过任何Java编程。我没有完全理解你问题中的代码。多个可能有用的容器/DI用例。这是另一个可能有用的方法。这是奥雷莉亚·迪

作为旁注,请远离容器。尽可能靠近容器。使用它违反了依赖倒置原则。列出依赖项比主动检索依赖项更好:

良好的ES6:

@酒吧 Baz类{ 建筑工人{ } } 好的打字稿:

@自动注入 Baz类{ 构造器Foo:Foo,bar:bar{ } } 不太好:

Baz类{ 建造师{ 设foo=container.getFoo; 让bar=container.getBar; } }
使用.get Type而不是按类型注入的原因是,您实际上事先不知道需要什么类型通常这是因为您依赖于一个接口,该接口有多个可注入实现,但您只需要其中一个,并且您的参数可以告诉您是哪一个。看,你不会写container.getFoo那太糟糕了你会写构造函数param{this.type
=container.get param.type}。不管怎样,你只缺了一部分。我不确定如何从参数返回类型,似乎在Typescript中找不到类对象/类型。我想我可以简单地执行类型{return Foo}但这并不能提供一个很好的接口方法签名。使用.get Type而不是按类型注入的原因是,您实际上事先不知道需要什么类型通常这是因为您依赖于接口,它有多个可注入实现,但您只需要其中一个,并且您的参数可以告诉您是哪一个。看,你不会写container.getFoo那太糟糕了,你会写构造函数param{this.type=container.get param.type}。不管怎样,你只缺了一部分。我不确定如何从参数返回类型,似乎在Typescript中找不到类对象/类型。我想我可以简单地执行类型{return Foo},但这并不能提供一个很好的接口方法签名。