9

我有构造函数

Foo(IColor c , int someNumber)

我只在运行时知道一些数字,我想在解析过程中调用这个构造函数并传递someNumber值和IColor要自动解析的值。

像这样的东西:

container.Resolve<IFoo>(someNumber);

有可能做到吗?

4

2 回答 2

18

您应该更喜欢 Typed Factory 而不是使用像服务定位器这样的容器。只需定义工厂接口:

public interface IFooFactory {
    IFoo Create(int somenumber);
}

并将其注册为类型工厂:

container.Register(Component.For<IFooFactory>().AsFactory());

然后使用依赖注入注入工厂并使用它:

var foo = fooFactory.Create(desiredArgumentValue);

有关更多信息,请阅读温莎文档

于 2012-07-31T06:52:24.283 回答
10

是的,在匿名类型的实例中传递构造函数参数;属性名称必须与构造函数参数名称匹配:

IColor desiredColor = //whatever
int desiredNumber = //whatever else
IFoo foo = container.Resolve<IFoo>(new { c = desiredColor, somenumber = desiredArgumentValue });

如果您使用的是不支持匿名类型(或者即使您不支持)的旧版 C#,您可以对字典执行相同操作:

IColor desiredColor = //whatever
int desiredNumber = //whatever
Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("c", desiredColor);
arguments.Add("somenumber", desiredNumber);
IFoo foo = container.Resolve<IFoo>(arguments);
于 2012-07-30T17:57:07.027 回答