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) |         self.__overridden_by__.append(provider) | ||||||
| 
 | 
 | ||||||
|  |     def delegate(self): | ||||||
|  |         """ | ||||||
|  |         Returns provider delegate. | ||||||
|  |         """ | ||||||
|  |         return lambda *args, **kwargs: self.__call__(*args, **kwargs) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| def prepare_injections(injections): | def prepare_injections(injections): | ||||||
|     """ |     """ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user