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

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

DI和IoC的工廠方法

DI和IoC的工廠方法

Cats萌萌 2019-07-11 21:20:01
DI和IoC的工廠方法我熟悉這些模式,但仍然不知道如何處理以下情況:public class CarFactory{      public CarFactory(Dep1,Dep2,Dep3,Dep4,Dep5,Dep6)      {      }      public ICar CreateCar(type)      {             switch(type)             {                case A:                    return new Car1(Dep1,Dep2,Dep3);                break;                case B:                    return new Car2(Dep4,Dep5,Dep6);                break;             }      }}一般來說,問題在于需要注入的引用量。如果有更多的汽車,情況會(huì)更糟。我想到的第一種方法是在工廠構(gòu)造函數(shù)中注入Car1和Car2,但這是反對工廠方法的,因?yàn)楣S總是返回相同的對象。第二種方法是注入servicelocator,但它在任何地方都是反模式的。如何解決?編輯:備選辦法1:public class CarFactory{      public CarFactory(IContainer container)      {         _container = container;      }      public ICar CreateCar(type)      {             switch(type)             {                case A:                    return _container.Resolve<ICar1>();                break;                case B:                      return _container.Resolve<ICar2>();                break;             }      }}可供選擇的方法2(由于樹中的依賴關(guān)系太多而難以使用):public class CarFactory{      public CarFactory()      {      }      public ICar CreateCar(type)      {             switch(type)             {                case A:                    return new Car1(new Dep1(),new Dep2(new Dep683(),new Dep684()),....)                break;                case B:                     return new Car2(new Dep4(),new Dep5(new Dep777(),new Dep684()),....)                break;             }      }}
查看完整描述

3 回答

?
皈依舞

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

回答您對代碼示例的評論Composition Root..您可以創(chuàng)建以下內(nèi)容,但這不是服務(wù)定位器。

public class CarFactory{
    private readonly Func<Type, ICar> carFactory;

    public CarFactory(Func<Type, ICar> carFactory)
    {
       this.carFactory = carFactory;
    }

    public ICar CreateCar(Type carType)
    {
        return carFactory(carType);
 }

這就是你的樣子Composition Root使用UnityDI容器:

Func<Type, ICar> carFactoryFunc = type => (ICar)container.Resolve(type);container.RegisterInstance<CarFactory>(new CarFactory(carFactoryFunc));


查看完整回答
反對 回復(fù) 2019-07-11
  • 3 回答
  • 0 關(guān)注
  • 486 瀏覽

添加回答

舉報(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)