2016-10-03 182 views
0

在单元测试中正确的部分我解决一个接口发送论据如下它的构造函数:温莎城堡 - 无法注册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 
    } 
} 

但我还是错误:

Can't create component 'namespace.MyDependency' as it has dependencies to be satisfied.

'namespace.MyDependency' is waiting for the following dependencies:
- Parameter 'arg1' which was not provided. Did you forget to set the dependency?
- Parameter 'arg2' which was not provided. Did you forget to set the dependency?

回答

0

您是否在其他地方注册IMyDependency?在发布实际代码之前,很难说出了什么问题。

这应该工作:

container.Register(
     Component.For<IMyDependency>().UsingFactoryMethod(
      () => 
      { 
       return new MyDependency("arg1 value", "arg2 value"); 
      }).LifestyleTransient()); 
+0

当我检查时,'MyDependency'也在其他一些注册中注册。 –

1

我想你应该尝试用它的构造函数参数的个数,而不是使用 “UsingFactoyMethod()” 注册IMyDependency implementaion:

string someArg = "something"; 
container.Register(
     Component.For<IMyDependency>().ImplementedBy<MyDependencyImp>() 
      .DependsOn(Dependency.OnValue("someArg",someArg)).LifestyleTransient()); 

假设MyDependencyImp构造看起来是这样的:

public MyDependencyImp(string someArg) 
{ 
    /.... 
} 

更多信息here

+0

我测试过了,它给了我一个有关IMyDependency已经有组件的错误;)。 –

+0

也许你已经在代码的另一个地方注册了它?如果是,你应该尝试替换它。 – YuvShap

+0

好吧,正如我可以检查,它只在'BarInstaller'和上面的代码两次注册,但如何取代它? –