2011-10-25 47 views
0

我有一個與IoC目的相關的問題/混淆。考慮以下幾點:IoC Container(Prism Unity)inteface解析和c#接口限制

的ISite - 接口

ImapSite:的ISite - 非默認的構造函數。

我註冊使用容器用混凝土小鬼界面如下:

_container.RegisterType<ISite, ImapSite>(new InjectionConstructor(typeof(string), typeof(Account))); 

而且使用解決它:

_site = _container.Resolve<ISite>(new DependencyOverride[] 
               { 
                new DependencyOverride<string>(host), 
                new DependencyOverride<Account>(Account.FromAppConfig()) 
               }); 

我現在想知道如果這有點跳動的IoC的,因爲其目的如果我不能約束ISite實現將具有什麼樣的構造函數,當ImapSite更改ctor簽名時,我仍然需要在代碼中的任何地方更改它。

謝謝!

回答

2

是的,如果你直接傳遞構造函數的參數,這會破壞IoC的目的。您應該重新考慮您的課程設計,以便只注入服務。也許你傳遞的參數實際上應該是類上單個方法的參數?

+0

所以所有的類都應該有默認的ctor? – Zapacila

+0

@Zapacila:不,但他們應該只有「服務」作爲構造函數參數:IoC容器已經知道如何解析和構建而不需要特殊的運行時參數的類或接口。如果一個類沒有依賴關係,它應該只有一個默認的構造函數。 – StriplingWarrior