2010-12-21 100 views
1

想要使用ObjectBuilder或ObjectBuilder2創建對象。使用ObjectBuilder創建對象

我不想使用StructureMap

我能創建使用下述代碼爲對象參數的構造函數。

public class ObjectFactory : BuilderBase<BuilderStage> 
    { 
     public static T BuildUp<T>() 
     { 
      var builder = new Builder(); 

      var locator = new Locator { { typeof(ILifetimeContainer), new LifetimeContainer() } }; 

      var buildUp = builder.BuildUp<T>(locator, null, null); 
      return buildUp; 
     } 

爲客戶創造的對象,你只需要調用

ObjectFactory.BuildUp<Customer>

但是這將創建沒有參數類的對象,但我需要建立一個有與參數的構造函數對象。

+0

你知道什麼參數需要傳遞給沒有默認參數的類型嗎?或者你想知道參數是什麼,提供它們的值並使用這些值調用構造函數? – decyclone 2010-12-21 05:06:17

+0

爲什麼打不過頭頂?統一。當然。 – Will 2010-12-21 05:13:53

+0

@decyclone:參數可以是任何東西。也可以使用Web客戶端軟件工廠注入參數。 – dhinesh 2010-12-21 05:23:05

回答

0

使用CreateNew Attribute類構建對象,並且工作正常。還使用了SessionStateBindingStrategry,以便該對象可以將會話變量作爲構造函數中的參數。

public static T BuildUp<T>() 
      { 
       var locator = new Locator { { typeof(ILifetimeContainer), new LifetimeContainer() } }; 
//For accessing the session variables through StateValue<> 
       locator.Add(new DependencyResolutionLocatorKey(typeof(ISessionStateLocatorService), null), new SessionStateLocatorService()); 

       var builder = new Builder(); 

       var attribute = new CreateNewAttribute(); 
       IParameter parameter = attribute.CreateParameter(typeof (T)); 

       builder.Strategies.AddNew<SessionStateBindingStrategy>(BuilderStage.PreCreation); 

       var builderContext = 
        new BuilderContext(builder.Strategies.MakeStrategyChain(),locator,builder.Policies); 
       object value = parameter.GetValue(builderContext); 

       return (T)value; 
      }