适配器模式+AutoFac
interface ICommand
{
void Excute();
}
class OpenCommand : ICommand
{
public void Excute()
{
Console.Write("this is Opened");
}
}
class SaveCommand : ICommand
{
public void Excute()
{
Console.Write("this is Saved");
}
}
class Button
{
private ICommand command;
private string name;
public Button(ICommand command, string name)
{
this.command = command;
this.name = name;
}
public void Click()
{
command.Excute();
}
public void Print()
{
command.Excute();
Console.WriteLine(" "+ name);
}
}
class Editor
{
private IEnumerable<Button> btns;
public Editor(IEnumerable<Button> btns)
{
this.btns = btns;
}
public void ClickAll()
{
foreach (var item in btns)
{
item.Click();
}
}
public void PrintAll()
{
foreach (var item in btns)
{
item.Print();
}
}
}
class Program
{
static void Main(string[] args)
{
var cotainer = new ContainerBuilder();
cotainer.RegisterType<OpenCommand>().As<ICommand>().WithMetadata("Name", "Open");
cotainer.RegisterType<SaveCommand>().As<ICommand>().WithMetadata("Name", "Save");
//cotainer.RegisterAdapter<ICommand, Button>(cmd => new Button(cmd));
cotainer.RegisterAdapter<Meta<ICommand>, Button>(cmd => new Button(cmd.Value, (string)cmd.Metadata["Name"]));
//cotainer.RegisterType<Button>();
cotainer.RegisterType<Editor>();
using (var contain=cotainer.Build())
{
var editor = contain.Resolve<Editor>();
editor.PrintAll();
}
}
}