Prevent Autofac from registering all types in referenced assemblies
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
add a comment |
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
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 toAutofac.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 useAttributedInjectionModule
instead ofPropertyInjectionModule
and then manually marking each of the classes where property injection is required withInjectPropertiesAttribute
though this is a lot of reworking.... is there a better/easier way to do this?
– DGibbs
Jan 2 at 13:53
ThePropertyInjectionModule
will resolve any settable property of the current handler. It should not register anything. Are you usingAnyConcreteTypeNotAlreadyRegisteredSource
? This module will automatically register anything and it may be the main issue
– Cyril Durand
Jan 2 at 14:16
add a comment |
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
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
c# asp.net dependency-injection autofac
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 toAutofac.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 useAttributedInjectionModule
instead ofPropertyInjectionModule
and then manually marking each of the classes where property injection is required withInjectPropertiesAttribute
though this is a lot of reworking.... is there a better/easier way to do this?
– DGibbs
Jan 2 at 13:53
ThePropertyInjectionModule
will resolve any settable property of the current handler. It should not register anything. Are you usingAnyConcreteTypeNotAlreadyRegisteredSource
? This module will automatically register anything and it may be the main issue
– Cyril Durand
Jan 2 at 14:16
add a comment |
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 toAutofac.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 useAttributedInjectionModule
instead ofPropertyInjectionModule
and then manually marking each of the classes where property injection is required withInjectPropertiesAttribute
though this is a lot of reworking.... is there a better/easier way to do this?
– DGibbs
Jan 2 at 13:53
ThePropertyInjectionModule
will resolve any settable property of the current handler. It should not register anything. Are you usingAnyConcreteTypeNotAlreadyRegisteredSource
? 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
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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 useAttributedInjectionModule
instead ofPropertyInjectionModule
and then manually marking each of the classes where property injection is required withInjectPropertiesAttribute
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 usingAnyConcreteTypeNotAlreadyRegisteredSource
? This module will automatically register anything and it may be the main issue– Cyril Durand
Jan 2 at 14:16