温莎城堡-无法注册一个适当的组件与论据

本文关键字:一个 组件 城堡 注册 | 更新日期: 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());