Skip to main content

Posts

Showing posts with the label runtime

Putem sa inlocuim switch ... case ?

Sunt locuri in aplicatii unde suntem obligati sa scriem ceva de genul: switch (value) { case "start": ... break; case "end": ... break; case "continue": ... break; default: ... break; } M-am intrebat de mai multe ori daca am putea oare sa eliminam switch. Nu mi-a placut niciodata de acest "statement". Este foarte util, este usor de inteles, dar parca ar putea sa fi inlocuit cu altceva. O solutie pe care pot sa o propun este inlocuirea acestuia cu un dictionar unde cheile sa reprezinta valorile posibile pe care le poate avea variabila, iar valorea din dictionar poate sa fie reprezentata de o functie anonima(lambda expression) sau de un pointer spre o metoda ce contine codul ce trebuie executat. Toate bune si frumoase, o solutie perfecta pentru a scrie un cod "trendy" folosind ceea ce a adus nou .NET 3.5. Dar uitam un lucru de baza, performanta . Switch ... case este optimizat pentru asa ceva si orice am face, oricum am scrie, nu o sa put...

Cum sa obtinem numele unei proprietati folosind lambda expression

Nu odată ne-am lovit de acesta problema. Cum sa transmit numele unei proprietăți ca si string, fara sa fiu obligat in cazul unei redenumiri sa nu trebuiasca sa caut prin tot codul. O solutie este crearea unei clase de mapare, dar aceasta trebuie sa fie tot timpul adusa la zi. O alta solutie este sa folosim reflection. Putem sa ne cream un helper care sa rezolve problema, dar lucrurile se complica cand vrem rezultatul sa fie sub forma: "proprietateParinte.proprietateCopil". Cei care folosesc MVC stiu ca acesta vine in ajutorul programatorilor cu ExpressionHelper.GetExpressionText (exprisieLambda) . Acesta metoda este des folosita cand se lucreaza cu ViewModel. Dar ce ne facem daca nu suntem intr-o aplicatie ASP.NET MVC? O solutie este sa luam expresia lambda si sa o descompunem. Prin acest mecanism putem sa iteram prin fiecare parte din expresie. Prin intermediul propietatii Body putem sa obtinem body-ul expresiei, iar in functie de tipul expresiei putem sa stim pe ce pozitie...

Action filter in Ioc - injectable action filters

ASP MVC ofera posibilitatea declararii unor actiuni comune folosind action filter. Odata ce am implementat un action filter, orice controller sau actiune poate sa fie decorata cu comportamentul pe care noi l-am definit. Se aseamana oarecum cum AOP-ul. Pentru mai multe informatii puteti sa gasiti aici. Dar daca folosim Ioc, ar fi frumos si uneori necesar sa putem injecta action filtere la runtime. Pentru acest lucru propun urmatorul mecanism: public class ActionFilterInIocAttribute : ActionFilterAttribute, IActionFilter { private IActionFilter _actionFilter; public ActionFilterInIocAttribute(Type filterType) { _actionFilter = Ioc.GetObject(filterType); } public void OnActionExecuted(ActionExecutedContext filterContext) { _actionFilter.OnActionExecuted(filterContext); } public void OnActionExecuting(ActionExecutingContext filterContext) { _actionFilter.OnActionExecuting(filterCont...