聲明匯入
以下內容從http://mef.codeplex.com/摘抄而來
屬性匯入
用Import標示組件作為屬性匯入
class Program
{
[Import]
public IMessageSender MessageSender { get; set; }
}
構造器參數匯入
通過將組件作為構造參數來實現匯入
使用方法:
1、添加ImportingConstructor屬性
2、為匯入添加構造參數
class Program
{
[ImportingConstructor]
public Program(IMessageSender messageSender)
{
...
}
}
參數匯入
class Program
{
[ImportingConstructor]
public Program(IMessageSender messageSender)
{
}
}
欄位匯入
class Program
{
[Import]
private IMessageSender _messageSender;
}
隨意匯入
[Export]
public class OrderController {
private ILogger _logger;
[ImportingConstructor]
public OrderController([Import(AllowDefault=true)] ILogger logger) {
if(logger == null)
logger = new DefaultLogger();
_logger = logger;
}
}
集合匯入
使用 ImportMany 屬性
public class Notifier
{
[ImportMany(AllowRecomposition=true)]
public IEnumerable<IMessageSender> Senders {get; set;}
public void Notify(string message)
{
foreach(IMessageSender sender in Senders)
{
sender.Send(message);
}
}
}
IPartImportsSatisfiedNotification
public class Program : IPartImportsSatisfiedNotification
{
[ImportMany]
public IEnumerable<IMessageSender> Senders {get; set;}
public void OnImportsSatisfied()
{
// when this is called, all imports that could be satisfied have been
satisfied.
}
}