在應用程序中託管(Hosing) MEF 涉及到建立組合容器(CompositionContainer) 實例,添加可組合部件(Composable Parts),包括應用程序宿主(Host)自己並進行組合(Composing)。ide
class Program { static void Main(string[] args) { Program p = new Program(); p.Run(); } [Import] public IMessageSender MessageSender { get; set; } public void Run() { Compose(); MessageSender.Send("Message Sent"); } private void Compose() { var container = new CompositionContainer(); container.ComposeParts(this, new EmailSender()); } }
public interface IMessageSender { void Send(string message); } [Export(typeof(IMessageSender))] public class EmailSender : IMessageSender { public void Send(string message) { Console.WriteLine(message); } }
[Import] public IMessageSender MessageSender { get; set; }
private void Compose() { var container = new CompositionContainer(); container.ComposeParts(this, new EmailSender()); }
private void Compose() { AssemblyCatalog catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var container = new CompositionContainer(catalog); container.ComposeParts(this); }
using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using System; using System.Reflection; namespace HostingMefInAnApplication { class Program { static void Main(string[] args) { Program p = new Program(); p.Run(); } [Import] public IMessageSender MessageSender { get; set; } public void Run() { Compose(); MessageSender.Send("Message Sent"); } private void Compose() { AssemblyCatalog catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var container = new CompositionContainer(catalog); container.ComposeParts(this); } } public interface IMessageSender { void Send(string message); } [Export(typeof(IMessageSender))] public class EmailSender : IMessageSender { public void Send(string message) { Console.WriteLine(message); } } }