我有构造函数
Foo(IColor c , int someNumber)
我只知道运行时的某个数字,我想在解析过程中调用此构造函数并传递someNumber
值,并IColor
进行自我解析。
这样的事情:
container.Resolve<IFoo>(someNumber);
是否可以完成?
答案 0 :(得分:18)
您应该更喜欢Typed Factory而不是使用像服务定位器这样的容器。只需定义工厂界面:
public interface IFooFactory {
IFoo Create(int somenumber);
}
并将其注册为打字工厂:
container.Register(Component.For<IFooFactory>().AsFactory());
然后使用依赖注入来注入工厂并使用它:
var foo = fooFactory.Create(desiredArgumentValue);
答案 1 :(得分:8)
是的,在匿名类型的实例中传递构造函数参数;属性名称必须与构造函数参数名称匹配:
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);