如何在MEF中使用依赖注入?

问题描述

我有一个ASP.Net Core 3.1应用程序,并且我有多个plugins通过MEF加载。简化的界面如下所示:

public interface IImportPlugin
{
    string Name { get; }
    string Category { get; }
    string Title { get; }
    string Description { get; }
}

一个插件类可能看起来像这样:

[Export(typeof(IImportPlugin))]
public sealed class ImportCustomers : IImportPlugin
{
    private ICustomerService customerService;
    //Other services...

    [ImportingConstructor]
    public ImportCustomers()
        : base()
    { 
        //Set properties
    }
}

如何将服务实例注入插件

解决方法

作为问题的答案,您可以通过使用Import Attribute或GetExports Methods获得两种解决方案。

用于导入(由构造函数导入):

num

对于GetExports:

[Export(typeof(IImportPlugin))]
public sealed class ImportCustomers : IImportPlugin
{
    private ICustomerService _customerService;
    //Other services...

    [ImportingConstructor]
    public ImportCustomers([Import(typeof(ICustomerService))] ICustomerService customerService)
      : base()
    { 
        //Set properties
        _customerService  = customerService ;
    }
}