代码之家  ›  专栏  ›  技术社区  ›  Mosh

使用结构映射时传递构造函数参数

  •  38
  • Mosh  · 技术社区  · 15 年前

    我正在为我的DI使用结构图。假设我有一个类接受1个参数,比如:

    public class ProductProvider : IProductProvider
    {
         public ProductProvider(string connectionString)
         { 
             ....
         }
    }
    

    我需要指定“connectionString” 在运行时 当我得到iproductProvider的实例时。

    我配置的结构图如下:

    ForRequestedType<IProductProvider>.TheDefault.Is.OfConcreteType<ProductProvider>().  
    WithCtorArgument("connectionString");
    

    但是,我不想在这里调用EqualTo(“something…”)方法,因为我需要一些工具在运行时动态地指定这个值。

    我的问题是:如何使用ObjectFactory获取IProductProvider的实例?

    目前,我有一些类似的东西:

    ObjectFactory.GetInstance<IProductProvider>();  
    

    但你知道,这不管用…

    任何建议都将不胜感激。

    2 回复  |  直到 12 年前
        1
  •  52
  •   Jaxidian    12 年前

    我建议使用结构映射配置声明这一点。使用稍微更新的结构图代码:

    For<IProductProvider>().Use<ProductProvider>
      .Ctor<string>("connectionString").Is(someValueAtRunTime);
    

    这样,您就不需要知道客户机代码的值,并且可以将IOC配置与主代码分开。

        2
  •  32
  •   Mosh    15 年前

    我自己找到答案了!解决方案如下:

    ObjectFactory.With("connectionString").EqualTo(someValueAtRunTime).GetInstance<IProductProvider>();
    

    希望这能帮助其他遇到同样问题的人。