コンストラクターのパラメーターとしてサービスとビューコントラクトを受け取るプレゼンターがあります。
public FooPresenter : IFooPresenter {
private IFooView view;
private readonly IFooService service;
public FooPresenter(IFooView view, IFooService service) {
this.view = view;
this.service = service;
}
}
Autofacでサービスを解決します。
private ContainerProvider BuildDependencies() {
var builder = new ContainerBuilder();
builder.Register<FooService>().As<IFooService>().FactoryScoped();
return new ContainerProvider(builder.Build());
}
私のASPXページ(実装の表示):
public partial class Foo : Page, IFooView {
private FooPresenter presenter;
public Foo() {
// this is straightforward but not really ideal
// (IoCResolve is a holder for how I hit the container in global.asax)
this.presenter = new FooPresenter(this, IoCResolve<IFooService>());
// I would rather have an interface IFooPresenter so I can do
this.presenter = IoCResolve<IFooPresenter>();
// this allows me to add more services as needed without having to
// come back and manually update this constructor call here
}
}
問題は、FooPresenterのコンストラクターが、コンテナーが新しいページを作成するためではなく、特定のページを予期していることです。
この解像度だけで、ビューの特定のインスタンスである現在のページをコンテナーに提供できますか?それは理にかなっていますか、それとも私はこれを別の方法で行う必要がありますか?