Я использую модули автозапуска для регистрации служб / типов приложений и т. Д., Например:
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, когда я проверяю свойство registery компонента контейнера. Это вызывает некоторые проблемы с некоторыми типами, которые являются частью используемой нами структуры (к сожалению, не имеем никакого контроля над ними), поэтому мы хотели бы настроить Autofac на:
a) НЕ регистрировать все типы / классы в приложении (я думал, что с помощью модулей автозапуска это удастся?)
b) Исключить определенный тип / класс / интерфейс из регистрации
Возможно ли это? Возможно, я как-то неправильно использовал модули? Любая помощь приветствуется.