Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ObjectBuilder创建对象_C# - Fatal编程技术网

C# 使用ObjectBuilder创建对象

C# 使用ObjectBuilder创建对象,c#,C#,要使用ObjectBuilder或ObjectBuilder2创建对象 我不想使用StructureMap 我能够使用下面提到的代码创建具有无参数构造函数的对象 public class ObjectFactory : BuilderBase<BuilderStage> { public static T BuildUp<T>() { var builder = new Builder();

要使用ObjectBuilder或ObjectBuilder2创建对象

我不想使用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:BuilderBase
{
公共静态T累积()
{
var builder=new builder();
var locator=new locator{{typeof(ILifetimeContainer),new LifetimeContainer()};
var build=builder.build(定位器,null,null);
回流累积;
}
为了创建客户的对象,您只需调用

ObjectFactory.build


然而,这会创建一个没有参数的类的对象,但是我需要创建一个有参数构造函数的对象。

使用CreateNew属性类来构建对象,并且运行良好。还使用SessionStateBindingStrategy,以便对象可以将会话变量作为构造函数中的参数

  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;
            }
publicstatict-building()
{
var locator=new locator{{typeof(ILifetimeContainer),new LifetimeContainer()};
//用于通过StateValue访问会话变量
Add(新的DependencyResolutionLocationWorkey(typeof(ISessionStateLocatorService),null),新的SessionStateLocatorService());
var builder=new builder();
var attribute=new CreateNewAttribute();
IPParameter参数=attribute.CreateParameter(typeof(T));
builder.Strategies.AddNew(BuilderStage.PreCreation);
var builderContext=
新的BuilderContext(builder.Strategies.MakeStrategyChain(),locator,builder.Policies);
对象值=parameter.GetValue(builderContext);
返回(T)值;
}

您知道对于没有默认参数的类型,需要传递哪些参数吗?或者您想知道这些参数是什么,提供它们的值并使用这些值调用构造函数吗?为什么要大惊小怪呢?Unity。当然。@decyclone:参数可以是任何东西。也可以是可以输入的参数CTE使用Web客户端软件工厂。我同意
will
。使用
Unity
或任何其他
IoC
容器进行依赖项注入。@decyclone:将无法使用Unity,因为已经使用了spring.net和WCFS。