Autofac 替换 MEF Extensions 通过目录地址获取服务列表

Autofac replacing MEF Extensions get the list of services by the address of a directory

好吧,我需要在初始化服务时从我的代码中删除 MEF 扩展,我看到 autofac 是一个很好的选择我最近在看它我正在使用 5.2 版的 autofac,关于 mi 代码。 .. 当使用 Dim catalog As New AggregateCatalog 是为了获取我想要初始化的服务列表时,

在此之后,我将服务添加到列表 catalog.Catalogs.Add(New DirectoryCatalog(applicationDirectory))

最后,服务按照下面的代码初始化,作为目标,我必须完全更改 IoC 并删除库:

Imports System.ComponentModel.Composition.Hosting

Imports System.ComponentModel.Composition

我的问题是,通过分配目录地址来完成这个添加库的过程的 autofact 替代方案是什么?是视觉基础函数:

<ImportMany(GetType(Team.Services.IServiceProvider))>
Protected Property Services As List(Of IServiceProvider)

Public Sub StartServices(applicationDirectory As String) 'As List(Of IServiceProvider)
        Dim catalog As New AggregateCatalog

        Me.applicationDirectory = applicationDirectory

        catalog.Catalogs.Add(New DirectoryCatalog(applicationDirectory))

        Dim container As New CompositionContainer(catalog)

        container.ComposeParts(Me)

        If Me.Services IsNot Nothing Then

            'For Each service In Me.Services
            'multi threaded
            Parallel.ForEach(Of IServiceProvider)(Me.Services, Sub(service)
                                                                   service.StartService()
                                                               End Sub)
        End If

    End Sub

您通过提供目录(基本上)所做的是:

  • 正在加载一些程序集
  • 正在从这些程序集中注册类型

Autofac 不加载程序集。您需要查看其他文档以了解 如何 为您的应用程序加载程序集。这实际上是一件非常复杂的事情,具体取决于应用程序类型和框架目标。

不过,如果您可以加载程序集,Autofac can register types from them, and there is a lot of documentation and examples 在那里进行程序集扫描。

不过,不幸的是,它不是加载和注册的“一站式服务”。您会发现现在所有的 DI 框架通常都是这种情况,因为程序集加载问题有很多潜在的答案。