I\'ve started using Autofac and want to scan some DLL\'s and get Autofac to register some of the classes within them.
The classes that I\'m interested in all inherit
I think you need to specify the base class of your Plugins on registration. The call AsImplementedInterfaces registers the type with its implemented interfaces and not by its base type. You should update your registration to register your plugins as PluginBase.
Here´s the code:
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>>();
Maybe do is this way:
builder
.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
.Where(t => t.GetInterfaces()
.Any(i => i.IsAssignableFrom(typeof (IDependency))))
.AsImplementedInterfaces()
.InstancePerDependency();
In this code I use IDependency
as a marker interface. You may replace it with your PluginBase
class and remove Where
method.
The point is to use IsAssignableFrom method.