Prevent Autofac from registering all types in referenced assemblies












1















I'm using autofac modules to register my applications services/types etc... like so:



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


Example module class/code:



    /// <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();
}


This is then being built in the Global.asax.cs file on application start where Get() returns the builder with registered modules:



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

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


This is all great however I'm finding that a lot of unrelated types are being registered by autofac when i review containers component registery property. This is causing some issues with some types that are part of a framework we use (have no control over these unfortunately) so would like to configure Autofac to either:



a) NOT register all types/classes in the application (I thought using autofac modules would achieve this?)



b) Exclude a specific type/class/interface from registration



Are either of these possible? Have I possibly used modules incorrectly somehow? Any help is appreciated.










share|improve this question























  • Autofac won't register types by itself (except some internals things). What are theses registered types you don't want to be registered ? Could the framework register it ?

    – Cyril Durand
    Jan 2 at 13:18











  • @CyrilDurand - Upon closer inspection it appears to be related to Autofac.WebForms automatic property injection. In my particular case its trying to inject into some properties that the framework classes/controls define, seems like I can use AttributedInjectionModule instead of PropertyInjectionModule and then manually marking each of the classes where property injection is required with InjectPropertiesAttribute though this is a lot of reworking.... is there a better/easier way to do this?

    – DGibbs
    Jan 2 at 13:53











  • The PropertyInjectionModule will resolve any settable property of the current handler. It should not register anything. Are you using AnyConcreteTypeNotAlreadyRegisteredSource ? This module will automatically register anything and it may be the main issue

    – Cyril Durand
    Jan 2 at 14:16
















1















I'm using autofac modules to register my applications services/types etc... like so:



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


Example module class/code:



    /// <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();
}


This is then being built in the Global.asax.cs file on application start where Get() returns the builder with registered modules:



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

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


This is all great however I'm finding that a lot of unrelated types are being registered by autofac when i review containers component registery property. This is causing some issues with some types that are part of a framework we use (have no control over these unfortunately) so would like to configure Autofac to either:



a) NOT register all types/classes in the application (I thought using autofac modules would achieve this?)



b) Exclude a specific type/class/interface from registration



Are either of these possible? Have I possibly used modules incorrectly somehow? Any help is appreciated.










share|improve this question























  • Autofac won't register types by itself (except some internals things). What are theses registered types you don't want to be registered ? Could the framework register it ?

    – Cyril Durand
    Jan 2 at 13:18











  • @CyrilDurand - Upon closer inspection it appears to be related to Autofac.WebForms automatic property injection. In my particular case its trying to inject into some properties that the framework classes/controls define, seems like I can use AttributedInjectionModule instead of PropertyInjectionModule and then manually marking each of the classes where property injection is required with InjectPropertiesAttribute though this is a lot of reworking.... is there a better/easier way to do this?

    – DGibbs
    Jan 2 at 13:53











  • The PropertyInjectionModule will resolve any settable property of the current handler. It should not register anything. Are you using AnyConcreteTypeNotAlreadyRegisteredSource ? This module will automatically register anything and it may be the main issue

    – Cyril Durand
    Jan 2 at 14:16














1












1








1








I'm using autofac modules to register my applications services/types etc... like so:



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


Example module class/code:



    /// <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();
}


This is then being built in the Global.asax.cs file on application start where Get() returns the builder with registered modules:



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

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


This is all great however I'm finding that a lot of unrelated types are being registered by autofac when i review containers component registery property. This is causing some issues with some types that are part of a framework we use (have no control over these unfortunately) so would like to configure Autofac to either:



a) NOT register all types/classes in the application (I thought using autofac modules would achieve this?)



b) Exclude a specific type/class/interface from registration



Are either of these possible? Have I possibly used modules incorrectly somehow? Any help is appreciated.










share|improve this question














I'm using autofac modules to register my applications services/types etc... like so:



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


Example module class/code:



    /// <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();
}


This is then being built in the Global.asax.cs file on application start where Get() returns the builder with registered modules:



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

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


This is all great however I'm finding that a lot of unrelated types are being registered by autofac when i review containers component registery property. This is causing some issues with some types that are part of a framework we use (have no control over these unfortunately) so would like to configure Autofac to either:



a) NOT register all types/classes in the application (I thought using autofac modules would achieve this?)



b) Exclude a specific type/class/interface from registration



Are either of these possible? Have I possibly used modules incorrectly somehow? Any help is appreciated.







c# asp.net dependency-injection autofac






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Jan 2 at 12:32









DGibbsDGibbs

13.2k53366




13.2k53366













  • Autofac won't register types by itself (except some internals things). What are theses registered types you don't want to be registered ? Could the framework register it ?

    – Cyril Durand
    Jan 2 at 13:18











  • @CyrilDurand - Upon closer inspection it appears to be related to Autofac.WebForms automatic property injection. In my particular case its trying to inject into some properties that the framework classes/controls define, seems like I can use AttributedInjectionModule instead of PropertyInjectionModule and then manually marking each of the classes where property injection is required with InjectPropertiesAttribute though this is a lot of reworking.... is there a better/easier way to do this?

    – DGibbs
    Jan 2 at 13:53











  • The PropertyInjectionModule will resolve any settable property of the current handler. It should not register anything. Are you using AnyConcreteTypeNotAlreadyRegisteredSource ? This module will automatically register anything and it may be the main issue

    – Cyril Durand
    Jan 2 at 14:16



















  • Autofac won't register types by itself (except some internals things). What are theses registered types you don't want to be registered ? Could the framework register it ?

    – Cyril Durand
    Jan 2 at 13:18











  • @CyrilDurand - Upon closer inspection it appears to be related to Autofac.WebForms automatic property injection. In my particular case its trying to inject into some properties that the framework classes/controls define, seems like I can use AttributedInjectionModule instead of PropertyInjectionModule and then manually marking each of the classes where property injection is required with InjectPropertiesAttribute though this is a lot of reworking.... is there a better/easier way to do this?

    – DGibbs
    Jan 2 at 13:53











  • The PropertyInjectionModule will resolve any settable property of the current handler. It should not register anything. Are you using AnyConcreteTypeNotAlreadyRegisteredSource ? This module will automatically register anything and it may be the main issue

    – Cyril Durand
    Jan 2 at 14:16

















Autofac won't register types by itself (except some internals things). What are theses registered types you don't want to be registered ? Could the framework register it ?

– Cyril Durand
Jan 2 at 13:18





Autofac won't register types by itself (except some internals things). What are theses registered types you don't want to be registered ? Could the framework register it ?

– Cyril Durand
Jan 2 at 13:18













@CyrilDurand - Upon closer inspection it appears to be related to Autofac.WebForms automatic property injection. In my particular case its trying to inject into some properties that the framework classes/controls define, seems like I can use AttributedInjectionModule instead of PropertyInjectionModule and then manually marking each of the classes where property injection is required with InjectPropertiesAttribute though this is a lot of reworking.... is there a better/easier way to do this?

– DGibbs
Jan 2 at 13:53





@CyrilDurand - Upon closer inspection it appears to be related to Autofac.WebForms automatic property injection. In my particular case its trying to inject into some properties that the framework classes/controls define, seems like I can use AttributedInjectionModule instead of PropertyInjectionModule and then manually marking each of the classes where property injection is required with InjectPropertiesAttribute though this is a lot of reworking.... is there a better/easier way to do this?

– DGibbs
Jan 2 at 13:53













The PropertyInjectionModule will resolve any settable property of the current handler. It should not register anything. Are you using AnyConcreteTypeNotAlreadyRegisteredSource ? This module will automatically register anything and it may be the main issue

– Cyril Durand
Jan 2 at 14:16





The PropertyInjectionModule will resolve any settable property of the current handler. It should not register anything. Are you using AnyConcreteTypeNotAlreadyRegisteredSource ? This module will automatically register anything and it may be the main issue

– Cyril Durand
Jan 2 at 14:16












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54006468%2fprevent-autofac-from-registering-all-types-in-referenced-assemblies%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54006468%2fprevent-autofac-from-registering-all-types-in-referenced-assemblies%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

MongoDB - Not Authorized To Execute Command

in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith

How to fix TextFormField cause rebuild widget in Flutter