繁体   English   中英

AngularJS动态依赖注入

[英]AngularJS dynamic dependency injection

我正在为存储提供商设置驱动程序系统。

我有一个非常基本的存储提供商:

angular.module('mooseGarden').provider('storage', function () {

    var storage = this;
    var driverName;

    this.setDriverName = function(name) {
        driverName = name;
        return storage;
    };

    this.getDriverName = function() {
        return driverName;
    };

    this.$get = [driverName, function(driver) {

        return {
            set: function(key, value) {
                driver.set(key, value);
            },
            get: function(key) {
                driver.get(key);
            }
        };
    }];
});

这是这样配置的:

app.config(['storageProvider', function(storageProvider) {
    storageProvider.setDriverName('StorageDriver_LocalStorage');
}]);

StorageDriver_LocalStorage在应用程序的其他位置定义。

提供者

您会注意到将变量driverName设置为要注入的服务。 我希望驱动程序成为Angular应用程序中的服务; 除了带来“干净漂亮”的方式外,我还希望这些驱动程序可以从其他模块中导入,并以编程方式定义为要使用的驱动程序。

此设置有什么问题?

storageProviderconfig块的依赖项。 我希望提供程序像对象一样加载/不是角度服务,而不是调用$get方法。 碰巧不是这样,调用$get 驱动程序服务是提供程序的依赖项,应用程序被卡住。

我觉得这有点愚蠢,因为提供程序的全部目的是可以在使用前对其进行配置,但是如果没有实例化就无法获取它们。 我觉得我在某个地方感到困惑...

有谁知道如何解决这个问题?

问题不是$ get已经执行-而是Angular已经弄清楚要发送到$ get的依赖项。

您需要使用的是Angular的$ injector服务 (特别是get方法)。

var driver = $injector.get(driverName);

我汇集了一个快速的Plnkr进行演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM