"Autofac sceglie automaticamente il costruttore con il maggior numero di parametri che è possibile ottenere dal contenitore." Voglio farlo diversamente e scegliere invece il costruttore predefinito. http://code.google.com/p/autofac/wiki/AutowiringSelezione costruttore senza parametri Autofac
internal class ParameterlessConstructorSelector : IConstructorSelector
{
#region Implementation of IConstructorSelector
/// <summary>
/// Selects the best constructor from the available constructors.
/// </summary>
/// <param name="constructorBindings">Available constructors.</param>
/// <returns>
/// The best constructor.
/// </returns>
public ConstructorParameterBinding SelectConstructorBinding(ConstructorParameterBinding[] constructorBindings)
{
return constructorBindings.First();
}
#endregion
}
Quando possibile cablare la classe, ho fatto questo:
builder.RegisterType<EmployeeFactory>()
.As<IEmployeeFactory>().UsingConstructor(new ParameterlessConstructorSelector())
.SingleInstance();
Il primo legame nella lista constructorBindings è sempre quello con il costruttore paremeterless. Non sono sicuro se è stato definito prima o il modo in cui autofac esegue la scansione dei costruttori ma è questo l'approccio giusto per il wire per il costruttore senza parametri?
Grazie
Sapevo di essere stato fortunato con First() :) Grazie per la spiegazione dettagliata. –
Invece di 'InvalidOperationException', Autofac ora ha una classe' DependencyResolutionException' che è più appropriata se il codificatore senza parametri non viene trovato. – aholmes