"Autofac automatycznie wybiera konstruktora z największą liczbą parametrów, które można uzyskać z pojemnika." Chcę, aby działał inaczej i zamiast tego wybierz domyślny konstruktor. http://code.google.com/p/autofac/wiki/AutowiringAutofac wybór parametrów bez parametrów
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
}
Kiedy okablowania klasy, zrobiłem to:
builder.RegisterType<EmployeeFactory>()
.As<IEmployeeFactory>().UsingConstructor(new ParameterlessConstructorSelector())
.SingleInstance();
Pierwszy wiąże w liście constructorBindings jest zawsze jeden z konstruktora paremeterless. Nie jestem pewien, czy zdefiniował pierwszy, czy sposób, w jaki autofac skanuje konstruktorów, ale czy jest to właściwe podejście do drutu dla konstruktora bez parametrów?
Dzięki
Wiedziałem, że miałem szczęście z First() :) Dziękuję za szczegółowe wyjaśnienie. –
Zamiast "InvalidOperationException", Autofac ma teraz klasę 'DependencyResolutionException', która jest bardziej odpowiednia, jeśli nie znaleziono bez parametrów Ctor. – aholmes