2011-08-14 226 views
2

我想讓我的架構更好,但我不知道如何解決依賴關係的問題。asp.net mvc和控制器服務架構

我有什麼:

  1. 類庫CoreService女巫有很多接口IMailIlogISession
  2. 在應用程序啓動我創建IMailIlogISession基礎類,並傳遞給CoreService
  3. 具有CoreService實例的基礎控制器類(屬性CoreService Services {get;}
  4. 用戶p lugin使用CoreService接口

問題: 每次我需要添加新服務時,我都必須編輯app start,CoreService。理想情況下,我想爲IMail(或任何其他服務)創建一個類庫,並在web.config或應用程序啓動中註冊它。

我會感謝任何意見或鏈接,將幫助我。

感謝所有用戶!

+0

您可能可以通過依賴注入框架和XML配置實現類似的功能,但爲什麼不想編輯應用程序啓動代碼? – R0MANARMY

+0

@ R0MANARMY感謝您的迴應,因爲我嘗試構建企業架構,所以我們有很多程序員女巫會創建一些他們特定的服務,我只是想用最小的步驟快速將其添加到常見項目 –

回答

2

看看Ninject and XML configuration Binding

我認爲這涵蓋了你想要實現的兩個部分。這是依賴注入以及無需重新編譯即可修改配置。

如果您添加Ninject(或其他DI容器 - 例如Unity)的全新服務無法爲您解決問題,則需要編輯您的代碼。我不認爲這是可以避免的。

1

你需要的是一個依賴注入框架來解決你的依賴關係。 DI框架將管理對象的創建和生命週期以及處理。

builder.RegisterType<MySession>().As<ISession>().InstancePerHttpRequest(); 
builder.RegisterType<MyMail>().As<IMail>().Singleton(); 

然後你可以使用構造器注入注入這些

public class MyController : BaseController 
{ 
    public MyController(ISession session, IMail mail) 
    { 
     _session = session; 
     _mail = mail; 
    } 

    //other methods and member variables 
} 

這種方式你,當你需要添加新的依賴只修改一個地方。

+0

感謝您的回覆,但我不希望每次都改變控制器。我可以解決它拋出其他類嗎? –

+1

@Sanja你可以提供一個工廠類。但上述方法更清潔。另一位查看上述代碼的成員將立即識別依賴關係。 – Eranga