, , - - - - , , .
/ /flippy -dippy-upside-down-whatever-we're-call-it-this-week , Autofac .
WinForms, .
Program.cs, Autofac, MainForm MainForm. , "", , , , , .
MainForm. , SplitContainers MenuBar .. Visual Studio, : , "" MainForm, , MainForm , .
, IEventBroker, "", BarcodeScanned ProductSaved. , .NET. , EditProductPresenter, EditProductUserControl, this.eventBroker.Fire("ProductSaved", new EventArgs<Product>(blah)), IEventBroker . , ListProductsPresenter ListProductsUserControl, . , , , , - , , MainForm .
MDI, MainForm IWindowWorkspace, Open() Close(). , , MainForm. , ListProductsPresenter EditProductPresenter EditProductUserControl, ListProductsUserControl. IWindowWorkspace, MainForm, - Open(newInstanceOfAnEditControl) , - . ( MainForm, -, -.)
, , ListProductsPresenter EditProductUserControl? Autofac - , , Autofac , factory ( ):
public class EditProductUserControl : UserControl
{
public EditProductUserControl(EditProductPresenter presenter)
{
}
}
public class EditProductPresenter
{
public delegate EditProductPresenter Factory(int productId);
public EditProductPresenter(
ISession session, // The NHibernate session reference
IEventBroker eventBroker,
int productId)
{
}
public void Save()
{
this.eventBroker.Publish("ProductSaved", new EventArgs(this.product));
}
}
public class ListProductsPresenter
{
private IEventBroker eventBroker;
private EditProductsPresenter.Factory factory;
private IWindowWorkspace workspace;
public ListProductsPresenter(
IEventBroker eventBroker,
EditProductsPresenter.Factory factory,
IWindowWorkspace workspace)
{
this.eventBroker = eventBroker;
this.factory = factory;
this.workspace = workspace;
this.eventBroker.Subscribe("ProductSaved", this.WhenProductSaved);
}
public void WhenDataGridRowDoubleClicked(int productId)
{
var editPresenter = this.factory(productId);
var editControl = new EditProductUserControl(editPresenter);
this.workspace.Open(editControl);
}
public void WhenProductSaved(object sender, EventArgs e)
{
}
}
, ListProductsPresenter Edit (.. ) - , - Edit, , Autofac, .
, , "/ / " ( , ) "UserControl/Form". UserControl / / , , . UserControl , IEditProductView, , . , INotifyPropertyChanged .
, . ? , . EditProductPresenter EditProductUserControl , , . , , , , .
, , . , INavigationFeature, MainForm. TreeBasedNavigationPresenter, INavigationFeature TreeBasedUserControl. CarouselBasedNavigationPresenter, INavigationFeature CarouselBasedUserControl. - , MainForm , , MainForm .
, . , ( ) , . , , , ; "/ /" "/ /" , , ; , -, , , .
. !