2011-08-18 40 views
2

我有一個MVC應用程序,它使用ninject向控制器注入服務依賴關係,它運行良好。不過,我也有一些域對象在構造函數中需要這些服務,我想用ninject來解決這些依賴關係,但不想直接在我的域對象程序集中引用ninject。我在這裏閱讀了很多問題和答案,但對於我來說,仍然不清楚最好的解決方法。例如,我有一個ShoppingCart域對象,它需要傳遞給其構造函數的IProductCatalogService實例。創建購物車實例的最佳模式是什麼?我可以參考根內核並向此致意,但這意味着在我的域程序集中引用了ninject。我應該在工廠類中訪問內核嗎?讓主要代碼庫中的依賴注入組件

歡迎任何想法或建議!

+0

相關:http://stackoverflow.com/questions/1933351/if-you-are-forced-to-use-an-anemic-domain-model-where-do-you-put-your-business-l – Steven

+0

相關:http://stackoverflow.com/questions/1793576/ddd-concepts-in-n-layer-development – Steven

+0

感謝您的好鏈接。 –

回答

1

在域對象中提供服務通常被認爲是不好的做法。我認爲你需要重新思考你正試圖達到的目標。爲什麼ShoppingCart需要使用產品目錄服務?

從域的角度來看,我會假設一個ShoppingCart會包含許多'項目',像total等屬性,並可能會傳遞給訂購服務。您的控制器操作會通過添加商品,刪除商品等來更新購物車域。

如果您確實需要考慮此選項,則使用commonservicelocator。這將分離出你對ninject的(直接)依賴。

+0

好的......謝謝..我會看看CommonServiceLocator。在這種情況下,ShoppingCart需要一個ProductCatalogService實例來檢查添加產品的檢查價格(由於價格非常動態,產品沒有價格屬性)。這只是一個例子..它可能是其他需要注入的東西,比如ICustomer,但聽起來我需要更好地理解架構。 –

+0

我不確定永遠不要將服務放入域對象中......在我看來,域對象應該能夠對其數據執行操作(我有移動數據的dto)。從古老的馬丁福勒看這篇文章 - http://www.martinfowler.com/bliki/AnemicDomainModel.html –

+0

好吧,這可能會變得複雜.... :)鏈接[鏈接](http://blog.jonathanoliver。 COM/2010/02 /域的模型聚集型的根和查對錶/)。 – Alistair