Changeset 179

Show
Ignore:
Timestamp:
11/12/08 21:22:06 (4 years ago)
Author:
dhasenan
Message:

Fixed #33: bound types pay attention to singletonness.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • dconstructor/trunk/dconstructor/build.d

    r148 r179  
    6060        static assert (is (TImpl : TVisible), "binding failure: cannot convert type " ~ TImpl.stringof ~ " to type " ~ TVisible.stringof); 
    6161        // again, only possible b/c no inheritance for structs 
    62         wrap (TVisible.classinfo, new DelegatingBuilder!(TBuilder, TVisible, TImpl)()); 
    63         return this; 
     62        wrap (TVisible.classinfo, new DelegatingBuilder!(TBuilder, TVisible, TImpl)(singleton!(TImpl))); 
     63        return this; 
     64    } 
     65 
     66    private bool singleton(T)() 
     67    { 
     68        if (is (T : Singleton)) return true; 
     69        if (is (T : Instance)) return false; 
     70        return _defaultSingleton; 
    6471    } 
    6572     
     
    6976    { 
    7077        static assert (is (T == class), "Currently, only classes can be registered for creation. Tried to register " ~ T.stringof); 
    71         if ((_defaultSingleton || is (T : Singleton)) && !is (T : Instance)) 
     78        if (singleton!(T)) 
    7279        { 
    7380            wrap (T.classinfo, new SingletonBuilder!(TBuilder, T)()); 
  • dconstructor/trunk/dconstructor/object_builder.d

    r148 r179  
    115115class DelegatingBuilder (TBuilder, T, TImpl): AbstractBuilder!(TBuilder, T) 
    116116{ 
    117     private ObjectBuilder!(TBuilder, TImpl) _builder; 
     117    private AbstractBuilder!(TBuilder, TImpl) _builder; 
    118118 
    119     this (
     119    this (bool singleton
    120120    { 
    121         _builder = new typeof(_builder)(); 
     121        if (singleton) 
     122        { 
     123            _builder = new SingletonBuilder!(TBuilder, TImpl)(); 
     124        } 
     125        else 
     126        { 
     127            _builder = new ObjectBuilder!(TBuilder, TImpl)(); 
     128        } 
    122129    } 
    123130 
  • dconstructor/trunk/examples/dsss.conf

    r133 r179  
    11[interception.d] 
     2[bind.d] 
    23[simple.d] 
    34[mkspeed.d]