如何告诉MEF此接口需要哪种类型

本文关键字:种类 类型 接口 何告诉 MEF | 更新日期: 2023-09-27 18:21:24

我有以下内容:

public interface IEmailService
    {
        bool SendEmail(MailMessage message);
    }
[Export(typeof(IEmailService))]
    public class SmtpEmailService : IEmailService
    {
}

[Export(typeof(IEmailService))]
    public class AmazonEmailService : IEmailService
    {
}

如何根据某些条件导入特定的?

例如,当我使用服务时,我有这样的东西:

public class MobileService
    {
        [Import] 
        public IEmailService EmailService { get; set; }

有没有办法在配置文件或任何其他地方配置MEF,以便它自动知道要导入哪个版本的EmailService

如何告诉MEF此接口需要哪种类型

您可以在导出时在Export属性中指定合同的名称,然后使用在Import属性中导出的名称之一,如下所示:

[Export("SmtpEmailService", typeof(IEmailService))]
public class SmtpEmailService : IEmailService {
}
[Export("AmazonEmailService", typeof(IEmailService))]
public class AmazonEmailService : IEmailService {
}
[Import("AmazonEmailService")]
public IEmailService EmailService { get; set; } //Import a specific type

如果您还想使用ImportMany,请参阅http://mef.codeplex.com

还有一个类似的SO问题应该会对你有所帮助。