温莎城堡-无法注册一个适当的组件与论据
本文关键字:一个 组件 城堡 注册 | 更新日期: 2023-09-27 18:11:33
在单元测试中,我解析了一个接口,为它的构造函数发送参数,如下所示:
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
}
}
但是我仍然有错误:
不能创建组件的命名空间。MyDependency’,因为它有需要满足的依赖。
的名称空间。MyDependency'正在等待下列依赖项:
-参数'arg1'没有提供。您忘记设置依赖关系了吗?
-参数'arg2'没有提供。您忘记设置依赖关系了吗?
我认为你应该尝试注册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());