mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 18:07:44 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Custom provider example."""
 | 
						|
 | 
						|
from dependency_injector import containers, providers
 | 
						|
 | 
						|
 | 
						|
class CustomFactory(providers.Provider):
 | 
						|
 | 
						|
    __slots__ = ('_factory',)
 | 
						|
 | 
						|
    def __init__(self, provides, *args, **kwargs):
 | 
						|
        self._factory = providers.Factory(provides, *args, **kwargs)
 | 
						|
        super().__init__()
 | 
						|
 | 
						|
    def __deepcopy__(self, memo):
 | 
						|
        copied = memo.get(id(self))
 | 
						|
        if copied is not None:
 | 
						|
            return copied
 | 
						|
 | 
						|
        copied = self.__class__(
 | 
						|
            self._factory.provides,
 | 
						|
            *providers.deepcopy(self._factory.args, memo),
 | 
						|
            **providers.deepcopy(self._factory.kwargs, memo),
 | 
						|
        )
 | 
						|
        self._copy_overridings(copied, memo)
 | 
						|
 | 
						|
        return copied
 | 
						|
 | 
						|
    def _provide(self, args, kwargs):
 | 
						|
        return self._factory(*args, **kwargs)
 | 
						|
 | 
						|
 | 
						|
class Container(containers.DeclarativeContainer):
 | 
						|
 | 
						|
    factory = CustomFactory(object)
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    container = Container()
 | 
						|
 | 
						|
    object1 = container.factory()
 | 
						|
    assert isinstance(object1, object)
 | 
						|
 | 
						|
    object2 = container.factory()
 | 
						|
    assert isinstance(object1, object)
 | 
						|
 | 
						|
    assert object1 is not object2
 |