簡體   English   中英

溫莎城堡-無法將適當的成分注冊到浮石中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM