Skip to content

Instantly share code, notes, and snippets.

@davybrion
Created September 9, 2012 12:21
Show Gist options
  • Select an option

  • Save davybrion/3684062 to your computer and use it in GitHub Desktop.

Select an option

Save davybrion/3684062 to your computer and use it in GitHub Desktop.
code snippets for "How To Write Testable ASP.NET UserControls", part I
public interface IViewPart
{
bool IsPostBack { get; }
IDictionary State { get; }
}
public interface IPartController
{
IDispatcher Dispatcher { get; set; }
void AddInitialRequests();
void GetInitialResponses();
}
public interface IViewPart<TPartController> : IViewPart
where TPartController : IPartController
{
TPartController GetPartController(IDispatcher dispatcher);
}
public interface IPartController<TViewPart> : IPartController
where TViewPart : IViewPart
{
TViewPart ViewPart { get; }
}
public abstract class PartController<TViewPart> : IPartController<TViewPart> where TViewPart : IViewPart
{
protected PartController(TViewPart viewPart)
{
ViewPart = viewPart;
}
public TViewPart ViewPart { get; private set; }
public IDispatcher Dispatcher { get; set; }
public virtual void AddInitialRequests() {}
public virtual void GetInitialResponses() {}
}
public class UserControl<TPartController> : System.Web.UI.UserControl, IViewPart<TPartController>
where TPartController : IPartController
{
protected TPartController Controller { get; private set; }
protected UserControl()
{
Controller = IoC.Container.Resolve<TPartController>(new { ViewPart = this });
}
public TPartController GetPartController(IDispatcher dispatcher)
{
Controller.Dispatcher = dispatcher;
return Controller;
}
public IDictionary State
{
get { return ViewState; }
}
}
public partial class DummyPart : UserControl<IDummyViewPartController>, IDummyViewPart
{
}
public interface IDummyViewPart : IViewPart<IDummyViewPartController>
{
}
public interface IDummyViewPartController : IPartController<IDummyViewPart>
{
void SomeSpecificOperationForTheDummyViewPart();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment