2

このようなプレゼンターがいたら-

public class LandingPresenter : ILandingPresenter
{            
    private ILandingView _view { get; set; }
    private IProductService _productService { get; set; }

    public LandingPresenter(ILandingView view, IProductService)
    {
        ....
    }
}

依存ビューが登録されないことを考慮して、このプレゼンターをAutofacに登録するにはどうすればよいですか(ただし、IProductServiceは登録されます)

    builder.RegisterType<LandingPresenter>().As<ILandingPresenter>(); ????
4

1 に答える 1

5

ビューもコンテナに登録して、Autofacを機能させてみませんか。次に、プレゼンターにコンストラクターインジェクションを使用し、ビューにプロパティインジェクションを使用して、プレゼンターとビューを自動的に接続できます。ビューをproperty-wiringに登録する必要があります。

builder.RegisterAssemblyTypes(ThisAssembly).
    Where(x => x.Name.EndsWith("View")).
    PropertiesAutowired(PropertyWiringFlags.AllowCircularDependencies).
    AsImplementedInterfaces();

プレゼンター:

public class LandingPresenter : ILandingPresenter
{            
    private ILandingView _view;
    private IProductService _productService { get; set; }

    public LandingPresenter(ILandingView view, IProductService _productService)
    {
        ....
    }
}

意見:

public class LandingView : UserControl, ILandingView
{
    // Constructor

    public LandingView(... other dependencies here ...)
    {
    }

    // This property will be set by Autofac
    public ILandingPresenter Presenter { get; set; }
}

また、ビューファーストに移行する場合は、ビューを逆にして、プレゼンターがビューをプロパティとして使用できるようにする必要があります。

于 2012-10-27T23:07:03.110 に答える