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 constructorpublic SqlConfigurationService(ILoggerService logger){}
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())
I think you can also pass in an InjectionConstructor (including ResolvedParameter<T>
s for the parameters) in your registration. Have you tried that?
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.
精彩评论