如何将param传递给ObjectFactory创建的实例的ctor

时间:2011-03-11 09:23:29

标签: structuremap

我使用StructureMap创建ModuleData的实例

我有很多继承自ModuleData的类(A,B,C ......类),每个类都在coustructor中得到Config1或Config2 在注册表(位于file1.cs)中,我扫描所有类型的ModuleData。

获取(在file2.cs中提到)我得到了实例。

我希望当ObjectFactory在创建ModuleData实例时创建Config1 / Config2时,它会将“param”传递给Config1 / Config2构造函数。 我如何配置structuremap来做到这一点?

P.S。 注册表& 获取方法位于不同的文件中! 谢谢

public class Config1
{
     Config1(string param)
     {
     }
}
public class Config2
{
     Config2(string param)
     {
     }
}
//.....//
public class A : ModuleData
{
    A(Config1 c)
   {
   }
}
public class B : ModuleData
{
    A(Config2 c)
   {
   }
}
//....//
//located in file1.cs
public Registry()
{
     Scan(x =>
     {
          x.TheCallingAssembly();
          x.AddAllTypesOf<ModuleData>();
     });            
     ObjectFactory.Initialize(x =>
     {
             x.For<Config1>().Use<Config1>();
             x.For<Config2>().Use<Config2>();
     });
}    
//....//
//located in file2.cs
public ModuleData Get(object o)
{
    var module = o as PageModule;
    var t = Type.GetType(string.Format("{0}.{1},{2}", Settings.Namespace, module.Name, Settings.Assembly));
    return ObjectFactory.With("param").EqualTo(module.Parameters).GetInstance(t) as ModuleData;
}

1 个答案:

答案 0 :(得分:0)

我想不出一个好的方法来做你想做的事情,我觉得它有点像设计问题......我想你需要解释一下为什么你需要为我做这个帮你。

什么是页面模块?为什么您的配置对象依赖于它?

根据您的评论,我认为您需要的是一个为您创建ModuleData对象的工厂对象。由于它们是对象,因此从容器中获取它们没有多大意义。考虑使用像Entity Framework这样的数据访问技术,从容器中获取这些对象是没有意义的。据我所知,这是一个类似的案例。