如何将参数传递给IOC框架中的构造函数? 我想做类似的事情:(试图成为IOC框架不可知;)

object objectToLogFor = xxx;
container.Resolve<ILogging>(objectToLogFor); 

public class MyLogging : ILogging
{
    public MyLogging(object objectToLogFor){}
}

似乎这在StructureMap中是不可能的。但我很乐意看到有人证明我错了。

其他框架是否功能更丰富?或者我是以错误的方式使用IOC框架?

有帮助吗?

解决方案

在结构图中,您可以使用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 - 进入 - services.aspx

其他提示

对于Castle Windsor:

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

注意使用匿名对象来指定构造函数参数。

使用StructureMap:

var foo = "foo";
var service = container.With(foo).GetInstance<TContract>();

这怎么能与语言无关?这是相关框架的实现细节。

Spring允许您将c'tor args指定为值/引用列表,如果这是你的事情。但是,与属性注入相比,它不是很易读。

有些人对此问题很热议,并且坚持认为c'tor注入是java中唯一的线程安全方法。从技术上讲,它们是正确的,但实际上它并不重要。

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

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

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

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

其他IoC框架功能更丰富。

即。使用Autofac查看 ParameterResolution

您也可以轻松地使用Windsor

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top