Unity容器属性注入是否遵循桥梁设计?

时间:2018-10-09 10:49:09

标签: c# unity-container bridge

我在Microsoft Unity上方编写了以下代码。这是property injection的实现。最近,我经历了Bridge Design Pattern,该运行时在运行时通过对象组合将抽象与实现分开。

抽象:实现IOperation的AbstractOperation

RefinedAbstraction: SubstractOperation

ImplementorInterface: ILogger

具体实现: ConsoleLogger

默认情况下,Unity-Container的属性注入是否遵循Bridge Design Pattern?有没有人在Unity Container中找到其他设计模式?请分享。

static void Main(string[] args)
{
    var program = new Program();
    unityContainer = new UnityContainer();

    unityContainer.RegisterType<IOperation, Unity.SubstractOperation>("-");

    var currentOperation = unityContainer.Resolve<IOperation>("*");
    currentOperation.logger.Info($"{nameof(SubtractOperation)} | Begin");

    currentOperation.DoIt(3, 2);

    Console.WriteLine(opera.Print(3, 2));
    currentOperation.logger.Info($"{nameof(SubtractOperation)} | End");
}

public interface ILogger
{
    void Info(string message);
    void Error(string message, Exception ex);
}

public interface IOperation
{
    ILogger logger { get; set; }
    int DoIt(int number01, int number02);
    string Print(int number01, int number02);
}

abstract class AbstractOperation : IOperation
{
    private ILogger _logger { get; set; }

    [Dependency()]
    public ILogger logger
    {
        get { return _logger; }
        set { _logger = value; }
    }

    public AbstractOperation()
    {
    }

    public abstract int DoIt(int number01, int number02);

    public virtual string PrintPretty(string operatorType, int number01, int number02, int result) => $"{number01} {operatorType} {number02} = {result}";

    public abstract string Print(int number01, int number02);
}

class SubtractOperation : AbstractOperation
{
    int result = 0;

    public override int DoIt(int number01, int number02) => result = number01 - number02;

    public override string Print(int number01, int number02) => base.PrintPretty("-", number01, number02, result);
}

0 个答案:

没有答案