抽象工厂使用Unity [英] Abstract Factory with Unity

查看:184
本文介绍了抽象工厂使用Unity的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个简单的抽象工厂实现:

I have a simple Abstract Factory implementation:

  public abstract class ICarFactory{
    public abstract ISportsCar CreateSportCar();
    public abstract IFamilyCar CreateFamilyCar();
}

public abstract class ISportsCar {        
    public abstract void Accelerate();
}

public abstract class IFamilyCar  {
    public abstract void Accelarete();
}

public class BMWFactory : ICarFactory {
    public override ISportsCar CreateSportCar() {
        return new BMWi7();
    }

    public override IFamilyCar CreateFamilyCar() {
        return new BMWM5();
    }
}

public class WolksvagenFactory : ICarFactory {

    public override ISportsCar CreateSportCar() {
        return new WVGolfR();
    }

    public override IFamilyCar CreateFamilyCar() {
        return new WVGolf();
    }
}

public class BMWi7 : ISportsCar {
    public override void Accelerate() {
        Console.WriteLine(this.ToString() + "accelerated.");
    }
}

public class BMWM5 : IFamilyCar {

    public override void Accelarete() {
        Console.WriteLine(this.ToString() + "accelerated.");
    }
}

public class WVGolfR : ISportsCar {

    public override void Accelerate() {
        Console.WriteLine(this.ToString() + "accelerated.");
    }
}

public class WVGolf : IFamilyCar {
    public override void Accelarete() {
        Console.WriteLine(this.ToString() + "accelerated.");
    }
}



客户端代码是这样的:

The client code is like this:

 class Program
{


    static void Main(string[] args)
    {
        ISportsCar sportsCar = GetFactory().CreateSportCar();
        sportsCar.Accelerate();

    }

    static ICarFactory GetFactory()
    {
        string userLocation;
        userLocation = "Hamburg"; //Get user location from user settings

        if (userLocation == "Hamburg")
        {
            return new BMWFactory();
        }
        else
        {
            return new WolksvagenFactory();
        }
    }


}

是否有可能通过使用Microsoft.Practices.Unity实现由GetFactory()方法做的工作?

Is it possible to achieve the job done by "GetFactory()" method by using Microsoft.Practices.Unity?

我通过搜索关于通过了大量的时间这个问题。但我找不到有用的东西。

I have passed a lot of time by searching about this issue. But I could not find something useful.

推荐答案

您可以通过注册一组每个位置的特定工厂实施名为注册和默认出厂:

You can implement that with named registrations by registering a set of specific factories per location and a default factory:

_container = new UnityContainer();      
//Register location specific factories
_container.RegisterType<ICarFactory,BMWFactory>("Hamburg");
...
//Register the default factory
_container.RegisterType<ICarFactory,WolksvagenFactory>();

您就可以使用下面的代码来解决工厂(使用的 IsRegistered 检查如果有一个位置的特定工厂):

You can then use the following code to resolve the factory (using IsRegistered to check if there is a specific factory for the location):

static ICarFactory GetFactory()
{
    string userLocation;
    userLocation = "Hamburg"; //Get user location from user settings

    //try get specific factory for location
    if(_container.IsRegistered<ICarFactory>(userLocation)){         
        return _container.Resolve<ICarFactory>(userLocation);
    }
    //if not found, get default factory
    return _container.Resolve<ICarFactory>();   
}

请参阅小提琴的这里

这篇关于抽象工厂使用Unity的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆