[英]Castle windsor - Unable to register a proper component with argumants
在单元测试中,我解析了一个接口,并为其构造函数发送自变量,如下所示:
var args = new { arg1 = "arg1 value", arg2 = "arg2 value" };
var component = container.Resolve<IMyDependency>(args);
而且效果很好。 但是现在我想在构造函数注入中做到这一点,例如:
public class Foo
{
private IMyDependency _dep;
public Foo(IMyDependency dep) { _dep = dep; }
}
因此,尝试将其注册为UsingFactoyMethod()
如下所示:
public class BarInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Component.For<IMyDependency>().UsingFactoryMethod(
() =>
{
var args = new { arg1 = "arg1 value", arg2 = "arg2 value" };
var result = container.Resolve<IMyDependency>(args);
return result;
}).LifestyleTransient());
// + some other registerations and installs
}
}
但是我仍然有错误:
无法创建组件“ namespace.MyDependency”,因为它具有要满足的依赖关系。
“ namespace.MyDependency”正在等待以下依赖项:
-未提供参数“ arg1”。 您忘记设置依赖项了吗?
-未提供参数“ arg2”。 您忘记设置依赖项了吗?
我认为您应该尝试向其构造函数args注册IMyDependency实现,而不是使用“ UsingFactoyMethod()”:
string someArg = "something";
container.Register(
Component.For<IMyDependency>().ImplementedBy<MyDependencyImp>()
.DependsOn(Dependency.OnValue("someArg",someArg)).LifestyleTransient());
假设MyDependencyImp构造函数看起来像这样:
public MyDependencyImp(string someArg)
{
/....
}
更多信息在这里 。
您是否在其他任何地方注册IMyDependency? 在发布实际代码之前,很难说出问题所在。
这应该工作:
container.Register(
Component.For<IMyDependency>().UsingFactoryMethod(
() =>
{
return new MyDependency("arg1 value", "arg2 value");
}).LifestyleTransient());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.