Boris Callens
Boris Callens

Reputation: 93357

Setting the parameterless constructor as the injection constructor in container creation

I have a class with two ctors. One parameterless and one with parameters.
Unity will by default take the gready approach and go for the last ctor.

How can I define what ctor to use (I want to parameterless) without adding dependency on Unity within my classes? I think it is possible to do it in my container creation, but I don't know how.

Currently my registration entry looks like this:

container.RegisterType<IConfigurationService, SqlConfigurationService>()

UPDATE
I'm trying to avoid programming in XML (config file) as much as possible.

EXTRA
How would registering a constructor with one parameter (which in it's turn should be injected)?
Say ILoggerService is already registered and I would want to use the constructor

public SqlConfigurationService(ILoggerService logger){}

Upvotes: 9

Views: 4365

Answers (3)

Lee
Lee

Reputation: 144176

You can apply the InjectionConstructor attribute to the constructor you want to use. This does have the disadvantange of moving some container configuration away from a central location however.

Upvotes: 0

Mark Seemann
Mark Seemann

Reputation: 233197

I don't have Unity nearby right now, but as far as I recall, you can do something like this:

container.RegisterType<IConfigurationService, SqlConfigurationService>(
    new InjectionConstructor())

Upvotes: 19

Botz3000
Botz3000

Reputation: 39620

I think you can also pass in an InjectionConstructor (including ResolvedParameter<T>s for the parameters) in your registration. Have you tried that?

Upvotes: 0

Related Questions