对模块的依赖注入

Jon*_*han 5 python dependency-injection python-module

考虑一个模块,例如some_module,各个模块在同一解释程序中使用。该模块将具有单个上下文。为了使some_module方法起作用,它必须接收类实例的依赖项注入。

将依赖项注入模块的pythonic和优雅的方法是什么?

Anu*_*yal 2

恕我直言,成熟的Dependency Injection所有术语更适合静态类型语言,如 Java,在 python 中你可以很容易地完成这一点,例如这里是一个简单的框架injection

class DefaultLogger(object):
   def log(self, line):
      print line

_features = {
   'logger': DefaultLogger
   }

def set_feature(name, feature):
   _features[name] = feature

def get_feature(name):
   return _features[name]()

class Whatever(object):

   def dosomething(self):
      feature = get_feature('logger')

      for i in range(5):
         feature.log("task %s"%i)

if __name__ == "__main__":
   class MyLogger(object):
      def log(sef, line):
         print "Cool",line

   set_feature('logger', MyLogger)

   Whatever().dosomething()
Run Code Online (Sandbox Code Playgroud)

输出:

Cool task 0
Cool task 1
Cool task 2
Cool task 3
Cool task 4
Run Code Online (Sandbox Code Playgroud)

如果您认为缺少某些内容,我们可以轻松添加它,即 python。

  • 这不是依赖注入,而是服务定位器。 (3认同)