2011-03-24 73 views
6

我有一個使用Typed Factory Facility在Windsor AsFactory()中註冊的IRunningTaskFactory。該接口有看起來像這樣一個方法:無法將參數傳遞給Windsor Typed Factory Facility

RunningTask Create(ITask task); 

凡RunningTask與溫莎註冊爲短暫有一個構造函數:

public RunningTask(ITask task, ITaskConfigurationFactory taskConfigurationFactory) 

其中ITaskConfigurationFactory與溫莎以及註冊。

我遇到的問題是,當我調用Create方法並傳遞一個ITask沿着我得到以下錯誤:

Castle.MicroKernel.Resolvers.DependencyResolverException : Missing dependency. Component Husky.nHuskyTasker.Core.Tasks.RunningTask has a dependency on Husky.nHuskyTasker.Core.Tasks.ITask, which could not be resolved. Make sure the dependency is correctly registered in the container as a service, or provided as inline argument

從我這應該是工作的文檔中讀取。

想法?

+1

現在我已經編寫了自己的RunningTaskFactory,它獲取一個IKernel並用提供的任務調用它,並且工作正常。根據文檔,我沒有做任何工廠不應該做的事情.. – 2011-03-24 16:35:20

+0

你仍然需要爲ITask明確註冊一個組件,我想... – 2011-03-24 18:28:46

+0

我不能。 ITask有N個實現,我不想讓他們訪問我的容器。 – 2011-03-24 19:28:34

回答

1

我發現,如果你指定與變量實例那麼你的參數會沒有錯誤傳遞的類型的虛擬註冊:

Component.For<ITask>().ImplementedBy<AnEmptyTask>() 

但我同意,this should work不必有模擬實現和額外註冊。

注意,註冊ITask將有溫莎自動裝配涉及該類型,你可能需要抑制

+0

@ShaneCourtrille:這是一個骯髒的黑客攻擊,不能標記爲答案。正確的答案是另一個。 – 2016-06-15 12:37:48

5

我有同樣的問題(運行參數爲類型化的工廠的任何公共屬性的副作用沒有解決),結果是因爲我的工廠參數名稱和實際類的構造函數參數的名稱是不同的,所以當在類型工廠調用.Create()時,它無法解析我的參數。

此線程通過問題解決: Can Castle.Windsor TypedFactoryFacility construct a type with only some ref arguments passed inline?

並不明顯,但它是有道理的。

+0

你,先生,只是救了我的理智。請有+1。 – 2015-08-09 20:23:05

+0

非常好,謝謝 – 2018-01-18 04:02:05