介紹
我工作在C#有一個自制的依賴注入框架(我的也許是一個傲慢的錯誤,目前正在考慮改用Ninject)。如何對一系列依賴用戶輸入和相互依賴的過程使用控制反轉?
我有3種方法中,由類表示:
GetInput
這是負責經由GUI獲取用戶輸入。 GUI通過輸入字段顯示所需的值,並將用戶輸入返回給過程。它的依賴關係是:一個GUI控制器以及我希望它獲得的值(例如「Foo」)。
BuildFile
這是負責將一系列值映射到模板中的鍵。該模板包含一些文本,該類填充空白並返回完成的文件。它的依賴關係是:模板文件,靜態鍵值(常量)和動態鍵值,其值應來自GetInput進程。
WriteFile
這是負責將文件寫入磁盤。它的依賴關係是:文件路徑和文件內容,其中文件內容應該來自BuildFile進程。
理想狀況
我希望能夠配置這些3個處理不同文件類型的組合。例如:
ConfigurationA
GetInput("Foo", "Bar") returns UserInput1, UserInput2
BuildFile(TemplateFileContent, {"StaticKey", "StaticValue"}, {"Foo", UserInput1}, {"Bar", UserInput2}) returns FileContent
WriteFile("C:/Some/Path.txt", FileContent)
現狀
我試圖建立在我的應用程序的根組成這些配置,我只是不能讓它工作。依賴於用戶輸入使得在給出用戶輸入之前不可能解決依賴關係,並且每個進程對前一個進程的依賴性也是一個挑戰。
問題
你會如何去關聯這些依賴關係?
是否有我應該使用的DI模式?
您的第二段是我已經完成的工作。它工作正常,並且解決了BuildFile進程和WriteFile進程之間的依賴關係問題,但是解決了用戶輸入依賴關係。 – Draknir 2014-12-10 08:45:10
至於第一段,它如何看待'獲取輸入然後用它來解決依賴關係'?你知道有這樣或那樣的例子嗎?我會對其他框架進行一些研究,看看它們是否提供了你提到的'截面'。 – Draknir 2014-12-10 08:47:53
這取決於您的應用程序正在使用的框架/堆棧以及註冊對象的距離。假設你正在編寫一個Web應用程序,如果你使用的是ASP.NET MVC,並且正在註冊你的控制器/視圖,那麼你可以在一個攔截器內部連接一個控制器/視圖方法的依賴關係解析器,在溫莎城堡是這種模式最強大的,Ninject有一個擴展,允許你完成同樣的事情。 – moarboilerplate 2014-12-11 16:03:59