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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

DI和IoC的工廠方法

DI和IoC的工廠方法

C#
溫溫醬 2019-08-03 03:03:39
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;             }      }}一般來說,問題在于需要注入的引用量。如果有更多的汽車,情況會更糟。我想到的第一種方法是在工廠構(gòu)造函數(shù)中注入Car1和Car2,但這是反對工廠方法的,因為工廠總是返回相同的對象。第二種方法是注入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貢獻1784條經(jīng)驗 獲得超8個贊

回答您對代碼示例的評論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-08-04
  • 3 回答
  • 0 關(guān)注
  • 286 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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