如果你想让你的注册属性基于,我建议你使用Autofac 的 MEF 适配器。它会让你用 装饰你的类型ExportAttribute
并被你的ContainerBuilder
.
例子
[Export(typeof(IRegisterDemo))] // <-- This exports RegisterDemo as IRegisterDemo
public class RegisterDemo : IRegisterDemo { }
// Example method to register assemblies with ContainerBuilder
public void RegisterPartsFromReferencedAssemblies(ContainerBuilder builder)
{
// Get referenced assemblies
var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>();
// Create an AssemblyCatalog from each assembly
var assemblyCatalogs = assemblies.Select(x => new AssemblyCatalog(x));
// Combine all AssemblyCatalogs into an AggregateCatalog
var catalog = new AggregateCatalog(assemblyCatalogs);
// Register the catalog with the ContainerBuilder
builder.RegisterComposablePartCatalog(catalog);
}
此示例说明如何导出类型以及如何使用ContainerBuilder
. 然后,您可以container.Resolve<IRegisterDemo>()
获取导出的部分(或将其注入到类中)。
注意:这将注册来自所有参考装配的导出零件,包括:
- 在 Web.config 文件的程序集元素中指定的程序集
- 从 App_Code 目录中的自定义代码构建的程序集
- 其他顶级文件夹中的程序集