适配器模式+AutoFac
适配器模式+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(); } } }