2
Autofacを使用して、ロガーを使用するコントローラクラスを取得しようとしています。OWIN統合による自動ファンクションが間違ったコンストラクタを呼び出す
コントローラは2つのコンストラクタ、0パラメータと1
と別のものを持っている私は密接に私ができるようthis exampleを踏襲しているが、何らかの理由で0パラメータのコンストラクタは毎回呼ばれています。
マイコード:
var config = new HttpConfiguration();
var builder = new ContainerBuilder();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.Register(c => new Logger()).As<ILogger>().InstancePerRequest();
var container = builder.Build();
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
app.UseAutofacMiddleware(container);
app.UseAutofacWebApi(config);
app.UseWebApi(config);
this.ConfigureAuth(app);
コントローラのコンストラクタ:
private readonly ILogger _logger;
public MailController()
{
}
public MailController(ILogger logger)
{
this._logger = logger;
}
私が間違って何をしているのですか?解決
このようなコンストラクタをオーバーロードするのは悪い習慣です。あなたのクラスが依存関係を持つことがあるが他のものは存在しない場合、それは通常あなたのクラスが本当に2つ(またはそれ以上)のクラスである必要があるというサインです。 – axlj
空のコンストラクタはデバッグ用です。私は問題が解決したらそれを削除するつもりです。 言うまでもなく、削除された場合、エラーが発生します(空のコンストラクタが呼び出されているため) –
https://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-classをご覧ください-検出。この場合、テスト環境で作業している場合は、TestLoggerなどを登録することができます。 – axlj