0

我的 MVC 项目使用 Autofac 3.0,我想RegisterType通过反思。首先定义了一个名为 likeIRegisterDemoRegisterDemoless 参数的接口和实现。我尝试builder.RegisterType(typeof(RegisterDemo)).As(typeof(IRegisterDemo))在我的Application_Start方法中使用它,它成功了,但这不是我的目的。

我想定义一个属性,比如UseAutofacAttribute反映类型和用途RegisterType(ImplType).As(InterfaceType),当我在 中编写代码时Application_Start,它起作用了,所以我构建了另一个项目来进一步执行此操作,并在我的 MVC 项目中引用了项目 dll,并且Application_Start只运行一个静态方法,不幸的是它失败了。

所以我想知道原因以及如何改变?

4

1 回答 1

0

如果你想让你的注册属性基于,我建议你使用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 目录中的自定义代码构建的程序集
  • 其他顶级文件夹中的程序集
于 2013-08-29T08:10:09.637 回答