2011-02-14 113 views
1

请:如果我的问题是不明确的,请告诉我,我会尝试重组它如何配置ObjectFactory的调用参数的构造函数structuremap

  1. 我需要[默认构造函数在LogOnModel,所以不能被删除。
  2. LoadModel + ModelFactory和LogOnModel物理上位于不同项目中的不同文件中,而project2具有对project1的引用,反之亦然。

1 - 让说 类型= typeof运算(LogOnModel)。当ObjectFactory.GetInstance(T)叫我想它来调用 参数构造LogOnModel和它传递@params

2 - 如果我将添加到参数构造LogOnModel另一参数,例如

public LogOnModel(string param, IPageService pageService) 

所以ObjectFacytory应该调用此构造方法没有任何问题

如何配置/启动的ObjectFactory,所以这会起作用吗?

谢谢

EDITED

//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) 
    {       
    }    
} 

回答

1

StructureMap将使用缺省使用大多数参数的构造,所以这部分很简单。然后你只需要配置参数的时值,像这样:

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

当你调用容器,使用与方法在你的参数来传递:

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

但“参数”是动态的。 LoadModel获取“param”,我需要将它传递给ModelFactory.Get,因此当它创建实例时,它会将“param”传递给创建的实例。 – theateist 2011-02-15 19:53:57

相关问题