是否有可能在F#中使用Ninject進行隱式構造函數注入?如果是這樣,怎麼樣?F#Ninject構造函數注入
我試着將[<Inject>]
屬性放在類型定義上,但是我收到了一個錯誤,認爲它是無效的。
這裏是我的嘗試:
[<Inject>]
type Blah(x : ISword) =
是否有可能在F#中使用Ninject進行隱式構造函數注入?如果是這樣,怎麼樣?F#Ninject構造函數注入
我試着將[<Inject>]
屬性放在類型定義上,但是我收到了一個錯誤,認爲它是無效的。
這裏是我的嘗試:
[<Inject>]
type Blah(x : ISword) =
的Inject
屬性是僅限Property setter injection。構造函數注入是隱含的。只需創建綁定,然後使用構造函數注入創建kernel.Get<Blah>()
和Blah
。
+1這是正確的。順便說一句(我只是從示例中的ctor中刪除了'[Inject]',在案例**中注意到[Inject]屬性很重要這意味着你的大部分代碼不需要知道Ninject,也不需要引用Ninject命名空間/庫。**有點太TL;人們的DR –
這裏的構造函數注入在F#:
type Foo(bar : IBar) =
// class members etc. here
,需要你拍的類型的屬性,以便了解任何圖書館,是做有問題;選另一個圖書館。
+1查看其他評論;雖然Ninject確實允許通過Methods上的屬性來覆蓋默認選擇策略,但絕對不建議或慣用。注意Ninject _ *不需要this_和[文檔](https://github.com/ninject/ninject/wiki/Injection-Patterns)不推薦它 - 事實上,它們走出去的狀態你的實際代碼應該是不要指向容器[並且是容器不可知的]。 (如果你認爲它在任何方式上有誤導性,那麼在這裏進行任何修改都很高興) –
該規範允許這樣如下:
class-type-defn :=
type-name primary-constr-args_opt object-val_opt '=' class class-type-body end
其中
primary-constr-args :=
attributes_opt accessopt (simple-pat, ... , simple-pat)
其結果是,你只需要更改您的代碼
type Blah [<Inject>](x : ISword) =
+1但是如果你使用Ninject,你絕對不應該這樣做。 Ninject通過'Bind'表達式有很多方法來識別使用的正確構造函數(在不太可能的情況下,它不會僅僅使用默認的構造函數選擇策略來做正確的事情)。 –
這應該是可能的 - 你可以編輯你的問題併發布代碼,所以我們可以看到你有什麼。這將幫助人們根據您的需求定製答案。 –