mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-10-31 07:57:43 +03:00 
			
		
		
		
	0.4.1 adding provider delegate
This commit is contained in:
		
							parent
							
								
									333f2db979
								
							
						
					
					
						commit
						039e211a09
					
				
							
								
								
									
										52
									
								
								examples/delegate.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								examples/delegate.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,52 @@ | |||
| """ | ||||
| Example of providers delegate. | ||||
| """ | ||||
| 
 | ||||
| from objects import AbstractCatalog | ||||
| from objects.providers import Singleton | ||||
| from objects.providers import NewInstance | ||||
| from objects.injections import InitArg | ||||
| from objects.injections import Attribute | ||||
| 
 | ||||
| 
 | ||||
| import sqlite3 | ||||
| 
 | ||||
| 
 | ||||
| # Some example classes. | ||||
| class ObjectA(object): | ||||
|     def __init__(self, db): | ||||
|         self.db = db | ||||
| 
 | ||||
| 
 | ||||
| class ObjectB(object): | ||||
|     def __init__(self, a_factory): | ||||
|         self.a_factory = a_factory | ||||
| 
 | ||||
| 
 | ||||
| # Catalog of objects providers. | ||||
| class Catalog(AbstractCatalog): | ||||
|     """ | ||||
|     Objects catalog. | ||||
|     """ | ||||
| 
 | ||||
|     database = Singleton(sqlite3.Connection, | ||||
|                          InitArg('database', ':memory:'), | ||||
|                          Attribute('row_factory', sqlite3.Row)) | ||||
|     """ :type: (objects.Provider) -> sqlite3.Connection """ | ||||
| 
 | ||||
|     object_a = NewInstance(ObjectA, | ||||
|                            InitArg('db', database)) | ||||
|     """ :type: (objects.Provider) -> ObjectA """ | ||||
| 
 | ||||
|     object_b = Singleton(ObjectB, | ||||
|                          InitArg('a_factory', object_a.delegate())) | ||||
|     """ :type: (objects.Provider) -> ObjectB """ | ||||
| 
 | ||||
| 
 | ||||
| # Catalog static provides. | ||||
| b = Catalog.object_b() | ||||
| a1, a2 = b.a_factory(), b.a_factory() | ||||
| 
 | ||||
| # Some asserts. | ||||
| assert a1 is not a2 | ||||
| assert a1.db is a2.db is Catalog.database() | ||||
|  | @ -32,6 +32,12 @@ class Provider(object): | |||
|         """ | ||||
|         self.__overridden_by__.append(provider) | ||||
| 
 | ||||
|     def delegate(self): | ||||
|         """ | ||||
|         Returns provider delegate. | ||||
|         """ | ||||
|         return lambda *args, **kwargs: self.__call__(*args, **kwargs) | ||||
| 
 | ||||
| 
 | ||||
| def prepare_injections(injections): | ||||
|     """ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user