【问题标题】:How to configure ObjectFactory to call parameterized constructor structuremap如何配置 ObjectFactory 以调用参数化构造函数结构映射
【发布时间】:2011-02-18 01:09:28
【问题描述】:

请:如果我的问题不清楚,请告诉我,我会尝试改写它

  1. 我需要 LogOnModel 中的 [Default Constructor],所以它不能被删除。
  2. Lo​​adModel+ModelFactory 和 LogOnModel 在物理上位于不同项目的不同文件中,并且 project2 引用了 project1,反之亦然。

1 - 让我们这么说 type=typeof(LogOnModel)。当 ObjectFactory.GetInstance(t) 被调用时,我希望它调用 参数化 LogOnModel 的构造函数并将@params 传递给它

2 - 如果我要在 LogOnModel 的 parameterized 构造函数中添加另一个参数,例如

public LogOnModel(string param, IPageService pageService)

所以 ObjectFacytory 应该毫无问题地调用这个构造函数

如何配置/启动 ObjectFactory,这样才行?

谢谢

已编辑

//Project1/file1.cs    
public void LoadModel(Type type, string param)  
{
     var factory = new ModelFactory();
     var model = factory.Get(type, **param**);
}
public class ModelFactory : IModelFactory
{
     public PageModel Get(Type t, **string param**)
     {            
         //NOW I NEED SOMEHOW TO PASS **param** TO EVERY INSTANCE THAT INHERITS FROM **PageModel**
         return ObjectFactory.GetInstance(t) as PageModel;
     }
}
//Project2/file2.cs
public class LogOnModel : PageModel
{        
     public LogOnModel()
     {
     }
     public LogOnModel(string param)
     {                        
     }              
}
public class Model2 : PageModel
{        
     public LogOnModel()
     {
     }
     public LogOnModel(string param)
     {                        
     }              
}
public class Model3 : PageModel
{        
     public LogOnModel()
     {
     }
     public LogOnModel(string param)
     {                        
     }              
}

【问题讨论】:

    标签: structuremap


    【解决方案1】:

    StructureMap 默认会使用参数最多的构造函数,所以这部分很简单。然后你只需要像这样配置参数的值:

    ObjectFactory.Initialize(i => {
        i.For<LogOnModel>().Use<LogOnModel>();
    });
    

    调用容器时,使用with方法传入参数:

    return ObjectFactory.With("param").EqualTo(param).GetInstance(t) as PageModel;
    

    【讨论】:

    • 但是“参数”是动态的。 LoadModel 获取“param”,我需要将它传递给 ModelFactory.Get,所以当它创建 Instance 时,它​​会将“param”传递给创建的 Instance
    • 您能否编辑您的问题以显示您的预期用途?您的示例未显示在任何地方使用的参数...
    猜你喜欢
    • 1970-01-01
    • 2011-12-29
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多