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

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

如何使用 Unity 一次性注入兩個(gè)實(shí)現(xiàn)?

如何使用 Unity 一次性注入兩個(gè)實(shí)現(xiàn)?

C#
嗶嗶one 2022-08-20 14:48:00
我有一個(gè)界面,描述如何將東西寫到控制臺(tái),還有一個(gè)實(shí)現(xiàn),.IConsoleupperCaseConsoleIConsole 使用 Unity 注入到類中。Foopublic interface IConsole { void WriteLine(string text);   }public class upperCaseConsole: IConsole {    public void WriteLine(string text){    Console.WriteLine(text.ToUpper());      }}public class Foo{ private readonly IConsole console;    public Foo(IConsole console){    this.console = console;     }    public void WriteStuff(string stuff){    console.WriteLine(stuff);    }}我現(xiàn)在想更改文本寫入控制臺(tái)的方式。我已經(jīng)很好地將實(shí)現(xiàn)與foo分離,我可以注入一個(gè)新的實(shí)現(xiàn),比如說。lowerCaseConsolepublic class lowerCaseConsole: IConsole {    public void WriteLine(string text){    Console.WriteLine(text.ToLower());      }}我的問題是,盡管我進(jìn)行了最好的測試,但我并不確定這能完成這項(xiàng)工作,我想同時(shí)運(yùn)行這兩個(gè)實(shí)現(xiàn)一段時(shí)間。lowerCaseConsole如何在不復(fù)制所有代碼的情況下執(zhí)行此操作?Foo我想避免這樣的事情:public class Foo{     private readonly IConsole lowerConsole;     private readonly IConsole upperConsole;        public Foo([Dependency("lower")] IConsole lowerConsole,             [Dependency("upper")] IConsole upperConsole){        this.lowerConsole = lowerConsole;        this.upperConsole = upperConsole;           }        public void WriteStuff(string stuff){        lowerConsole.WriteLine(stuff);        upperConsole.WriteLine(stuff);        }    }注意:現(xiàn)實(shí)生活中的情況是我即將繼續(xù)進(jìn)行數(shù)據(jù)庫更改。我想透明地開始寫入新數(shù)據(jù)庫,看看事情進(jìn)展如何,但請(qǐng)繼續(xù)寫入當(dāng)前數(shù)據(jù)庫,以防萬一。
查看完整描述

2 回答

?
MMTTMM

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

一種選擇是創(chuàng)建包含其他兩個(gè)的私有成員的第三個(gè)實(shí)現(xiàn),并且對(duì)其方法的調(diào)用將僅轉(zhuǎn)發(fā)給其他兩種類型。WriteLine


public class BothCaseConsole : IConsole

{

    private readonly LowerCaseConsole lcc = new LowerCaseConsole();

    private readonly UpperCaseConsole ucc = new UpperCaseConsole();


    public void WriteLine(string text)

    {

        lcc.WriteLine(text);

        ucc.WriteLine(text);

    }

}

然后只需將此類型注入到:Foo


new Foo(new BothCaseConsole()).WriteStuff("Stuff to write");

http://img1.sycdn.imooc.com//630083cf000107a803550170.jpg

查看完整回答
反對(duì) 回復(fù) 2022-08-20
?
犯罪嫌疑人X

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

您可以使用命名注冊(cè)來注入 。這種方法很容易通過更多的實(shí)現(xiàn)進(jìn)行擴(kuò)展...或者您可以輕松刪除其中一個(gè)...IEnumerable<IConsole>


container.RegisterType<IConsole, LowerConsole>("LowerConsole");

container.RegisterType<IConsole, UpperConsole>("UpperConsole");

container.RegisterType<IEnumerable<IConsole>, IConsole[]>();

然后ctor變得有點(diǎn)不同,還有方法...FooWriteStuff


public Foo(IEnumerable<IConsole> consoles)

{

    this.consoles = consoles; 

}


public void WriteStuff(string stuff)

{

    foreach(var console in consoles)

    {

        console.WriteLine(stuff);

    }

}


查看完整回答
反對(duì) 回復(fù) 2022-08-20
  • 2 回答
  • 0 關(guān)注
  • 118 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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