हाँ यह है, तो आप सिर्फ यह सीधे उपयोग नहीं कर सकते लेकिन आप इसे वारिस कर सकते हैं और बच्चे का उपयोग
यहाँ
एक है कि मैं का उपयोग करें:
public class Cruder<TEntity, TInput> : Controller
where TInput : new()
where TEntity : new()
{
protected readonly IRepo<TEntity> repo;
private readonly IBuilder<TEntity, TInput> builder;
public Cruder(IRepo<TEntity> repo, IBuilder<TEntity, TInput> builder)
{
this.repo = repo;
this.builder = builder;
}
public virtual ActionResult Index(int? page)
{
return View(repo.GetPageable(page ?? 1, 5));
}
public ActionResult Create()
{
return View(builder.BuildInput(new TEntity()));
}
[HttpPost]
public ActionResult Create(TInput o)
{
if (!ModelState.IsValid)
return View(o);
repo.Insert(builder.BuilEntity(o));
return RedirectToAction("index");
}
}
और उपयोगों:
public class FieldController : Cruder<Field,FieldInput>
{
public FieldController(IRepo<Field> repo, IBuilder<Field, FieldInput> builder)
: base(repo, builder)
{
}
}
public class MeasureController : Cruder<Measure, MeasureInput>
{
public MeasureController(IRepo<Measure> repo, IBuilder<Measure, MeasureInput> builder) : base(repo, builder)
{
}
}
public class DistrictController : Cruder<District, DistrictInput>
{
public DistrictController(IRepo<District> repo, IBuilder<District, DistrictInput> builder) : base(repo, builder)
{
}
}
public class PerfecterController : Cruder<Perfecter, PerfecterInput>
{
public PerfecterController(IRepo<Perfecter> repo, IBuilder<Perfecter, PerfecterInput> builder) : base(repo, builder)
{
}
}
कोड यहाँ है: http://code.google.com/p/asms-md/source/browse/trunk/WebUI/Controllers/FieldController.cs
अद्यतन:
यहाँ अब इस दृष्टिकोण का उपयोग कर: http://prodinner.codeplex.com
आप प्रत्येक 'T' के लिए मार्गों कॉन्फ़िगर करने के लिए ... या रनटाइम पर कुछ देखने जादू होगा। इसके लिए प्रदर्शन प्रभाव हैं, लेकिन इसके अलावा, ऐसा लगता है कि यह एक अच्छा विचार होगा। – bzlm