【问题标题】:How to pass param to ctor of instance that is created by ObjectFactory如何将参数传递给由 ObjectFactory 创建的实例的 ctor
【发布时间】:2011-03-16 01:26:12
【问题描述】:

我使用 StructureMap 创建 ModuleData 的实例

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

Get(包含在 file2.cs)中,我得到了实例。

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

附: RegistryGet 方法位于 不同 文件中!!! 谢谢

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;
}

【问题讨论】:

    标签: structuremap


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答。配置对象是反序列化器。它接收字符串,反序列化并填充自己。并且 ModuleData 对象(A,B...)使用此配置对象来完成工作。因此,ModuleData 对象将接收字符串,创建 Config 对象并填充它,我希望它们(ModuleData 对象)已经接收填充的 Config 对象。 PageModule 是用于构建要由 ObjectFactory 实例化的对象类型的类。
    猜你喜欢
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2014-05-24
    • 1970-01-01
    • 2020-10-12
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多