gpt4 book ai didi

javascript - AngularJS (1.x) 中的 IOC - 我怎样才能实现?

转载 作者:行者123 更新时间:2023-12-03 07:53:13 24 4
gpt4 key购买 nike

我正在寻找某种方法来添加 IOC给我的angularjs应用程序。

我的应用是 Multi-Tenancy 应用,我需要为具有相同注册名称的不同租户使用不同的服务。

我正在使用TypeScript它也适用于在接口(interface)上使用具体类型。

我的主要问题是如何决定如何向我的应用程序注册正确的服务。

这是一个例子:

var app = angular.module('app',[]);

// common registrations
app.service('commonService1', commonServiceFunction1);
app.service('commonService2', commonServiceFunction2);
app.service('commonService3', commonServiceFunction3);
app.service('commonService4', commonServiceFunction4);

// here I want to register the same service name with a different implementation
app.service('serviceName', serviceOneFunction); // sometimes I will need this service
app.service('serviceName', serviceTwoFunction); // sometimes I will need this service

我想到的事情:

  1. 添加一些逻辑并为每个源下载正确的 js 文件 - 函数名称将保持不变,我需要找到一种方法来提供包含正确函数的正确 js 文件。

  2. 覆盖注册(例如,注册公共(public)服务,然后使用特定实现覆盖注册)。

这两种解决方案对我来说都很丑陋且无法扩展。

我想要一个 IOC 容器或其他一些更好且可扩展的解决方案。

最佳答案

如果我理解问题正确,您可以将服务(实际上是提供者)注册为您在 Angular 配置步骤中配置的提供者。所以,它可能看起来像这样:

var app = angular.module('app',[]);

// common registrations
app.service('commonService1', commonServiceFunction1);
app.service('commonService2', commonServiceFunction2);
app.service('commonService3', commonServiceFunction3);
app.service('commonService4', commonServiceFunction4);

app.provider('serviceName', function ServiceNameProvider() {
var service = DefaultService;

this.setService = function(newService) {
service = newService
}

this.$get = [function() {
return service;
}];
});

app.config(["serviceNameProvider", function(serviceNameProvider) {
if(someCondition) {
serviceNameProvider.setService(ServiceImpl1);
} else {
serviceNameProvider.setService(ServiceImpl2);
}
}]);

服务、工厂只是提供商的语法糖。您可以在 Angular 的配置阶段确定您的服务功能。 ServiceImpl1ServiceImpl2 只是函数,但您可以在那里使用依赖项注入(inject),因为它们将由提供者使用 $injector.invoke 调用。 Read about providers

关于javascript - AngularJS (1.x) 中的 IOC - 我怎样才能实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34923686/

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