首页 > 解决方案 > 防止 Autofac 在引用的程序集中注册所有类型

问题描述

我正在使用 autofac 模块来注册我的应用程序服务/类型等......就像这样:

 var builder = new ContainerBuilder();
 builder.RegisterModule(new ConduitRegistryModule());
 // etc...

示例模块类/代码:

    /// <summary>
    /// Handle the container builder load event.
    /// </summary>
    /// <param name="builder">The builder through which components can be registered.</param>
    protected override void Load(ContainerBuilder builder)
    {
        RegisterServices(builder);
    }

    /// <summary>
    /// Register conduit services.
    /// </summary>
    /// <param name="builder">The builder through which components can be registered.</param>
    private void RegisterServices(ContainerBuilder builder)
    {
        builder.RegisterType<Conduit>().As<IConduit>().SingleInstance();
        builder.RegisterType<PhonelistService>().As<IPhonelistService>().InstancePerLifetimeScope();
        builder.RegisterType<UtilityService>().As<IUtilityService>().InstancePerLifetimeScope();
        builder.RegisterType<VacancyService>().As<IVacancyService>().InstancePerLifetimeScope();
        builder.RegisterType<InteractionService>().As<IInteractionService>().InstancePerLifetimeScope();
    }

然后Global.asax.cs在应用程序启动时在文件中构建它,Get()返回带有注册模块的构建器:

var builder = new ContainerBuilderFactory().Get();

_containerProvider = new ContainerProvider(builder.Build());

这一切都很好,但是当我查看容器组件注册属性时,我发现 autofac 正在注册许多不相关的类型。这会导致我们使用的框架中的某些类型出现一些问题(不幸的是无法控制这些类型),因此希望将 Autofac 配置为:

a) 不要在应用程序中注册所有类型/类(我认为使用 autofac 模块可以实现这一点?)

b) 从注册中排除特定类型/类/接口

这些都可能吗?我是否可能以某种方式错误地使用了模块?任何帮助表示赞赏。

标签: c#asp.netdependency-injectionautofac

解决方案


推荐阅读