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

如何在IOC框架中将参数传递给构造函数

  •  11
  • Ruben  · 技术社区  · 16 年前

    在IOC框架中,如何将参数传递给构造函数? 我想这样做:(试图成为国际奥委会框架不可知论者;))

    object objectToLogFor = xxx;
    container.Resolve<ILogging>(objectToLogFor); 
    
    public class MyLogging : ILogging
    {
        public MyLogging(object objectToLogFor){}
    }
    

    其他框架是否功能更丰富?还是我用错了国际奥委会的框架?

    7 回复  |  直到 16 年前
        1
  •  9
  •   Edward Wilde    13 年前

    在结构图中,可以使用With方法实现这一点:

    string objectToLogFor = "PolicyName";
    ObjectFactory.With<string>(objectToLogFor).GetInstance<ILogging>();
    

    见: http://codebetter.com/blogs/jeremy.miller/archive/2008/09/25/using-structuremap-2-5-to-inject-your-entity-objects-into-services.aspx

        2
  •  5
  •   Remco Ros    16 年前

    var foo = "foo";
    var service = this.container.Resolve<TContract>(new { constructorArg1 = foo });
    

    使用StructureMap:

    var foo = "foo";
    var service = container.With(foo).GetInstance<TContract>();
    
        3
  •  4
  •   skaffman    16 年前

    这怎么可能是语言不可知论呢?这是有关框架的实现细节。

    Spring允许您将c'tor参数指定为值/引用列表(如果您喜欢的话)。但是,与属性注入相比,它的可读性不强。

        4
  •  3
  •   Romain Verdier    16 年前

    这不应该是一个非常普遍的需求,但有时它是一个有效的需求。 Ninject ,它比StructureMap轻,允许您在从上下文检索瞬态对象时传递参数。 Spring.NET

    大多数情况下,IoC容器中声明的对象不是瞬态的,通过构造函数/属性/方法接受其他非瞬态对象作为依赖项。

    但是,如果您真的不想将容器用作工厂,并且如果您对要解析的对象有足够的控制权,那么您可以使用属性或方法注入,即使它听起来不那么自然,在某种程度上风险更大。

        5
  •  0
  •   Paul de Vrieze    16 年前

    是的,其他框架的功能更加丰富-您需要使用允许构造函数注入的ioc框架。Spring是允许构造函数依赖项注入的多语言ioc容器的一个示例。

        6
  •  0
  •   Rinat Abdullin    16 年前

    即,查看 ParameterResolution 使用Autofac

        7
  •  0
  •   Krzysztof Kozmic    16 年前

    你也可以用温莎轻松做到这一点