c# - 特定类类型的 Autofac 扫描程序集

标签 c# .net inversion-of-control autofac

我已经开始使用 Autofac 并想扫描一些 DLL 并获取 Autofac 以在其中注册一些类。

我感兴趣的类都继承自 PluginBase 类,但下面的代码似乎没有注册它们。谁能帮忙?

        var assemblies = AppDomain.CurrentDomain.GetAssemblies();


        var builder = new ContainerBuilder();
        builder.RegisterAssemblyTypes(assemblies)
            .Where(t => t.BaseType == typeof(PluginBase))
            .AsImplementedInterfaces()
            .AsSelf();

        var container = builder.Build();
        var pluginClasses = container.Resolve<IEnumerable<PluginBase>>();

        //pluginClasses is empty!!!!

最佳答案

我认为您需要在注册时指定插件的基类。调用 AsImplementedInterfaces 使用其实现的接口(interface)而不是其基类型注册类型。您应该更新您的注册以将您的插件注册为 PluginBase。

代码如下:

var assemblies = AppDomain.CurrentDomain.GetAssemblies();


    var builder = new ContainerBuilder();
    builder.RegisterAssemblyTypes(assemblies)
        .Where(t => t.BaseType == typeof(PluginBase))
        .As<PluginBase>();

    var container = builder.Build();
    var pluginClasses = container.Resolve<IEnumerable<PluginBase>>();

关于c# - 特定类类型的 Autofac 扫描程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9159277/

相关文章:

C#语音合成

javascript - 为什么我的 asp 文件上传控件文本框是可点击的?

c# - 如何压缩文件

.net - 将 IOC 容器复古安装到 Brownfield Enterprise .net 应用程序

c# - VS2012 中 C# 的大括号样式

C#:查询线程的状态

c# - 如何删除应用于类属性的程序集?

c# - 如何在 WCF 服务和宿主应用程序之间进行通信?

c++ - 控制反转的利弊

java - 非目标绑定(bind)与 `toInstance()` 绑定(bind)