我有构造函数
Foo(IColor c , int someNumber)
我只在运行时知道一些数字,我想在解析过程中调用这个构造函数并传递someNumber
值和IColor
要自动解析的值。
像这样的东西:
container.Resolve<IFoo>(someNumber);
有可能做到吗?
我有构造函数
Foo(IColor c , int someNumber)
我只在运行时知道一些数字,我想在解析过程中调用这个构造函数并传递someNumber
值和IColor
要自动解析的值。
像这样的东西:
container.Resolve<IFoo>(someNumber);
有可能做到吗?
您应该更喜欢 Typed Factory 而不是使用像服务定位器这样的容器。只需定义工厂接口:
public interface IFooFactory {
IFoo Create(int somenumber);
}
并将其注册为类型工厂:
container.Register(Component.For<IFooFactory>().AsFactory());
然后使用依赖注入注入工厂并使用它:
var foo = fooFactory.Create(desiredArgumentValue);
有关更多信息,请阅读温莎文档
是的,在匿名类型的实例中传递构造函数参数;属性名称必须与构造函数参数名称匹配:
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);