我在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);
}