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 框架通常都是这种情况,因为程序集加载问题有很多潜在的答案。
好吧,我需要在初始化服务时从我的代码中删除 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 框架通常都是这种情况,因为程序集加载问题有很多潜在的答案。