"Autofac tự động chọn hàm tạo với hầu hết các tham số có thể lấy được từ vùng chứa." Tôi muốn nó để làm khác và chọn constructor mặc định để thay thế. http://code.google.com/p/autofac/wiki/AutowiringLựa chọn nhà khai thác tham số 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
}
Khi tôi dây lớp, tôi đã làm điều này:
builder.RegisterType<EmployeeFactory>()
.As<IEmployeeFactory>().UsingConstructor(new ParameterlessConstructorSelector())
.SingleInstance();
Đầu tiên ràng buộc trong danh sách constructorBindings luôn luôn là một constructor với paremeterless. Không chắc chắn nếu nó được xác định đầu tiên hoặc cách autofac quét các nhà xây dựng nhưng đây là phương pháp tiếp cận đúng để dây cho constructor parameterless?
Cảm ơn
Tôi biết mình đã may mắn với First() :) Cảm ơn bạn đã giải thích chi tiết. –
Thay vì 'InvalidOperationException', bây giờ Autofac có một lớp' DependencyResolutionException' thích hợp hơn nếu không tìm thấy ctor parameterless. – aholmes