2012-07-29 70 views
2

我使用this document來使用類型化工廠並將參數傳遞給構造函數。 當我嘗試傳遞代碼中顯示的2個參數(1,「fo」)時,鍵入的工廠給了我這個錯誤。將參數傳遞給Castle Windsor Typed Factory

enter image description here

public class SomeClass { 
    public ITypedFactory2 F2 { get; set; } 
    public void SomeFunction() { 
     var req = F2.Create<IGetFooRequest>(1, "fo"); // ERROR HERE 
    } 
} 
public class GetFooRequest : IGetFooRequest { 
    public int Bar { get; private set; } 
    public string Ton { get; private set; } 
    public GetFooRequest(int bar, string ton) { 
     Bar = bar; 
     Ton = ton; 
    } 
} 
public interface IGetFooRequest{ 
    int Bar { get; } 
    string Ton { get; } 
}  
public interface ITypedFactory2 { 
    T Create<T>(int param1, string param2); 
    void Release(object t); 
} 

,這是溫莎安裝部分...

container.AddFacility<TypedFactoryFacility>(); 
container.Register(Component.For<ITypedFactory2>().AsFactory()); 
container.Register(AllTypes 
      .FromAssemblyContaining<IGetFooRequest>() 
      .Where(type => type.Name.EndsWith("Request")) 
      .WithService.AllInterfaces().LifestyleTransient()); 

爲什麼說解決不了非可選依賴...?我通過了(1,「fo」);我真的不明白爲什麼會發生這種情況......請幫忙。

回答

7

我有同樣的問題,只是想出了答案。工廠方法的參數名稱和類構造函數的名稱必須匹配,不區分大小寫。

因此改變你的工廠接口

public interface ITypedFactory2 { 
    T Create<T>(int **bar**, string **ton**); 
    void Release(object t); 
} 

或者你的類

public class GetFooRequest : IGetFooRequest { 
    public int Bar { get; private set; } 
    public string Ton { get; private set; } 
    public GetFooRequest(int **param1**, string **param2**) { 
     Bar = bar; 
     Ton = ton; 
    } 
} 
+0

這不是標記爲答案? – neverseenjack 2017-03-30 15:49:33

+0

它被標記爲答案 – 2018-01-19 02:00:23

2

我看着我自己的代碼,並說,(int param1,string param2)看起來不太好。讓我使用(int bar,string ton)...並且命名解決了問題。 LoL難以置信,我沒有看到那份文件提到了命名的重要性。

幸運的是,我記得intro here說依賴關係首先按名稱解析,然後按類型解決。所以這是按名稱部分做的工作,而按類型部分則進入了水中。無論如何,我很高興我想出瞭如何使用它,所以我在這裏與任何需要它的人分享我的答案。

+0

這種反應基本上是重複以前的答案。 Wabble提供的答覆應該在這裏標記爲答案。 – neverseenjack 2017-03-30 15:53:17

+0

@neverseenjack看看日期,因爲我在Wabble看了這一年之前回答了我自己的問題。 Anway,我把他的帖子標記爲答案。 – Tom 2017-04-14 00:47:51