2010-12-21 78 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; 
      }