我已经开始使用 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/