第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

我可以將構(gòu)造函數(shù)參數(shù)傳遞給Unity的Resolve()方法嗎?

我可以將構(gòu)造函數(shù)參數(shù)傳遞給Unity的Resolve()方法嗎?

斯蒂芬大帝 2019-12-26 09:02:39
我正在使用Microsoft的Unity進(jìn)行依賴項(xiàng)注入,并且我想執(zhí)行以下操作:IDataContext context = _unityContainer.Resolve<IDataContext>();var repositoryA = _unityContainer.Resolve<IRepositoryA>(context); //Same instance of contextvar repositoryB = _unityContainer.Resolve<IRepositoryB>(context); //Same instance of contextIDataContext context2 = _unityContainer.Resolve<IDataContext>(); //New instancevar repositoryA2 = _unityContainer.Resolve<IRepositoryA>(context2);RepositoryA并且RepositoryB都有一個(gè)構(gòu)造函數(shù)的IDataContext參數(shù),我想團(tuán)結(jié)與我通過(guò)它的上下文初始化存儲(chǔ)庫(kù)。另請(qǐng)注意,該代碼IDataContext未在Unity中注冊(cè)(我不需要3個(gè)實(shí)例IDataContext)。
查看完整描述

3 回答

?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊

<2美分>


如果您以后決定使用需要更多或更少的服務(wù)而不只是上下文,該怎么辦?


構(gòu)造函數(shù)參數(shù)和IoC的問(wèn)題在于,這些參數(shù)最終會(huì)與所使用的具體類型相關(guān)聯(lián),而不是成為服務(wù)接口定義的合同的一部分。


我的建議是,您也可以解析上下文,并且我相信Unity應(yīng)該為您提供一種避免構(gòu)造它的3個(gè)實(shí)例的方法,或者您應(yīng)該考慮一種可以為您構(gòu)造對(duì)象的工廠服務(wù)。


例如,如果您以后決定構(gòu)建一個(gè)完全不依賴傳統(tǒng)數(shù)據(jù)庫(kù)的存儲(chǔ)庫(kù),而是使用XML文件為測(cè)試生成偽數(shù)據(jù)該怎么辦?您將如何向該構(gòu)造函數(shù)提供XML內(nèi)容?


IoC基于解耦代碼,通過(guò)將參數(shù)的類型和參數(shù)的語(yǔ)義綁定到具體類型,您確實(shí)沒(méi)有正確地進(jìn)行解耦,仍然存在依賴性。


“只要實(shí)現(xiàn)此接口,此代碼就可以與任何類型的存儲(chǔ)庫(kù)進(jìn)行對(duì)話。...哦,并使用數(shù)據(jù)上下文”。


現(xiàn)在,我知道其他IoC容器也對(duì)此提供支持,我在自己的第一個(gè)版本中也對(duì)此提供了支持,但我認(rèn)為它不屬于解決步驟。


</ 2美分>


查看完整回答
反對(duì) 回復(fù) 2019-12-26
?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以根據(jù)您的注入架構(gòu)在ResolvedParameter <T>(“ name”)中使用InjectionConstructor / InjectionProperty / InjectionMethod來(lái)獲取容器中預(yù)注冊(cè)對(duì)象的實(shí)例。


在您的情況下,此對(duì)象必須使用名稱注冊(cè),并且為同樣起見(jiàn),您需要ContainerControlledLifeTimeManager()與LifeTimeManager。


_unityContainer.RegisterType<IDataContext,DataContextA>("DataContextA", new ContainerControlledLifeTimeManager());

_unityContainer.RegisterType<IDataContext,DataContextB>("DataContextB");


  var repositoryA = _unityContainer.Resolve<IRepositoryA>(new InjectionConstructor(

new ResolvedParameter<IDataContext>("DataContextA")));


  var repositoryB = _unityContainer.Resolve<IRepositoryB>(new InjectionConstructor(

new ResolvedParameter<IDataContext>("DataContextA")));


  var repositoryA2 = _unityContainer.Resolve<IRepositoryA>(new InjectionConstructor(

new ResolvedParameter<IDataContext>("DataContextB")));


查看完整回答
反對(duì) 回復(fù) 2019-12-26
  • 3 回答
  • 0 關(guān)注
  • 749 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)