"Autofacは、コンテナから取得できる最も多くのパラメータを持つコンストラクタを自動的に選択します。私はそれが別の方法で行い、代わりにデフォルトのコンストラクタを選択したいと思います。 http://code.google.com/p/autofac/wiki/Autowiringパラメータなしコンストラクタの自動選択
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
}
私はクラスを配線すると、私はこれをしなかった:
builder.RegisterType<EmployeeFactory>()
.As<IEmployeeFactory>().UsingConstructor(new ParameterlessConstructorSelector())
.SingleInstance();
最初はconstructorBindingsリストに結合が常にparemeterlessのコンストラクタを有するものです。それが最初に定義されているかどうか、あるいはautofacがコンストラクタをスキャンする方法はわかりませんが、これはパラメータのないコンストラクタのための正しい方法でしょうか?
私は運が良かったと私は知っていたFirst():)詳細な説明をいただきありがとうございます。 –
Autofacは 'InvalidOperationException'の代わりに、パラメータのないctorが見つからなければより適切な' DependencyResolutionException'クラスを持つようになりました。 – aholmes