• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    TENCOKACISTROMYProgramovani v C#, F# a dalsich jazycich pro .NET, Mono a ostatni CLI implementace
    SLUPKA
    SLUPKA --- ---
    NECROMAN: Zrovna postsharp debugovat jde. a to dokonce můžeš debugovat kompilaci (compile time inicializaci aspektů) a můžeš debugovat i kód injectovaný normálně za běhu.

    Ten kód je podstatně čistší, přehlednější a nemusíš se zabývat všude kravinama (notifikace, logování apod.). Kdyby nebyl PostSharp tak drahý, tak ho používám na většinu projektů, takhle ho používám jen na školní věci, mám akademickou licenci. Škoda, že to MS nekoupí a neudělá z toho část .NETu, aspekty mi přijdou dost nepokryté (v Javě třeba jsou).
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: INotifyPropertyChanged obchazime pres CallerMemberNameAttribute. Ale jinak to pouzivame pro lazyloading a lazysaving objektu do objektovy databaze. Zrovna PostSharp je dobrej v tom, ze upravi i *.pdb soubory, takze neni problem s debugovanim.
    NECROMAN
    NECROMAN --- ---
    BUTHRAKAUR: pouzivam MVVM Light s upravenymy zdrojaky, no nevadi...

    Jinak jaky mate nazor na frameworky, ktere pri kompilaci injectuji skript do vaseho kodu, typicky PostSharp pro zjednoduseni implementace INOtifyPropertyChanged a podobne? Sice to na obrazcich vypada hezky, ale ke mne do aplikace to nesmi, jakmile chce clovek debugovat kod, ktery je vygenerovany behem compile time, tak ma smulu.
    Design Pattern Automation – PostSharp
    http://www.postsharp.net/
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    NECROMAN: z hlavy ted nevim, pze jsem delsi dobu WPF/SL nedelal, ale Caliburn/Micro to ma vyreseny - zkousel jsi se na nej kouknout?
    NECROMAN
    NECROMAN --- ---
    TENCOKACISTROMY: asi tak, v SharePoint bylo bezne volani reflexi treba internal metody pro zakladani SPListu, protoze verejne API neumoznovalo vse potrebne. Pak byl treba problem, ze SP3 pro SP2007 zmenil signaturu tohoto internal interface a aplikace prestala fungovat, jo, take jsem od toho rad utekl :)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    VIRTUALVOID: Tak ja nepredpokladam, ze bych neco takovyho pouzival v produkcnim kodu. To by musel bejt fakt hodne extremni pripad. Hacky jsem do produkce musel nasazovat zatim jen u Sharepointu a od nej jsem utekl.
    NECROMAN
    NECROMAN --- ---
    Vite o nejake best practice, jak pouzivat Dependency Injection v code-behind ve WPF/Silverlight pages? stranky nelze vytvaret pokud vim na vyzadani, ale vzdy musi obsahovat:

    public XYPage()
    {
    InitializeComponent();
    }

    Zatim to resim tak, ze si tam pres service locator v konstruktoru stranky vyzadam potrebny viewModel, ale co jsem cetl, tak explicitni volani ServiceLocatoru neni dobry zpusob.

    InitializeComponent();
    model = ServiceLocator.Current.GetInstance<MainViewModel>();

    Druha moznost me napada primo databinding DataContextu v XAMLu a v konstruktoru jen ulozeni teto instance.

    DataContext="{Binding Main, Source={StaticResource Locator}}"

    InitializeComponent();
    model = (MainViewModel)DataContext;
    VIRTUALVOID
    VIRTUALVOID --- ---
    TENCOKACISTROMY: ktory sa pri najblizsom update compilera zmeni...
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: Tak tohle je super uber prasarna. Ale je to fakt peknej trik.
    SLUPKA
    SLUPKA --- ---
    NECROMAN: to je docela zajímavé a zajímalo by mne, jak moc jistě to funguje. Protože v době, kdy byl .NET 4.0 nový (neboli nevím, jestli se to ještě stále tak chová), tak pokud jsem udělal třídu s klasickým destruktorem (takový ten co obsahuje this.Finalize(false)) a při vytváření argumentů pro konstruktor padla výjimka, tak v debug režimu se nestalo nic (nebo jsem si ničeho nevšiml), ale v release režimu se zavolal destruktor a tam padla výjimka, protože this bylo null. Zajímavé bylo, že se mi nepodařila nijak odchytnout (ani na AppDomain unhandled exceptions), takže zjistit v čem byla chyba byla opravdu chuťovka. A jelikož jsem nikde GC.Collect nevolal, tak ta výjimka padala opravdu krásně náhodně.
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    ty vole, to je ale neskutecna prasarna :DDDD
    NECROMAN
    NECROMAN --- ---
    Tady je reseni, je to trik s rekurzivne volanymi konstruktory, vyjimkou v konstruktoru a ulozeni instance v destruktoru, tfuj!
    Detaily kdyztak zde (ani jsem netusil, ze se ta diskuze tak rozvine):
    Is it possible to define valid C# interface that cannot be implemented? - Stack Overflow
    http://stackoverflow.com/...it-possible-to-define-valid-c-sharp-interface-that-cannot-be-implemented
    public class CantDeriveMe
    {
        private CantDeriveMe()
        {
        }
        public override string ToString()
        {
            return "My type is " + this.GetType().ToString();
        }
    }
    
    public class OhYeah : CantDeriveMe
    {
        static OhYeah CapturedInstance;
    
        ~OhYeah()
        {
            CapturedInstance = this;
        }
    
        OhYeah() : this(1/String.Empty.Length)
        {
        }
        OhYeah(int blah) : this()
        {
        }
        public static OhYeah Create()
        {
            try
            {
                new OhYeah(4);
            }
            catch (DivideByZeroException)
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
            return CapturedInstance;
        }
        public static void test()
        {
            OhYeah it;
            it = OhYeah.Create();
            Console.WriteLine("Result was ({0})", it);
        }
    }
    H_U_N_T_E_R
    H_U_N_T_E_R --- ---
    NECROMAN: funkce FormatterServices.GetUninitializedObject vytvoří instanci, aniž by volala ctor (pravděpodobně prostě naalokuje na heapu vhodnej počet bytů a kašle na vše). Jak ale vytvořit instanci a zavolat ctor (bez relfexe) netuším :-(
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    NECROMAN: nema to nejaky staticky factory funkce?
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    taktez obecny deserializator bez reflexe si tak nejak nedovedu predstavit....
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    bez aktivatoru / reflexe fakt nevim :)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    Jak rika SLUPKA, deserializatory obcas pouzivaj zpusob, kdy vytvorej instanci, ale zadnej konstruktor neni volanej. Reflexi nepouzivaj, maj na to nejakej jinej trik. Nezkoumal jsem ale jakej.
    SLUPKA
    SLUPKA --- ---
    NECROMAN: No, co deserializace? :)
    NECROMAN
    NECROMAN --- ---
    Kviz na nedeli, lze ziskat instanci tridy, ktera neni sealed, ale ma jediny konstruktor new(), ktery je private, zadne dalsi fieldy, property, metody? Bez pouziti reflexe, activatoru, atd.
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    URZA: ma to celkem rozumny stripping, cili tu velikost udrzuje jakztakz rozumnou (aspon u iosu to celkem fungovalo)
    PAJIN
    PAJIN --- ---
    Ahoj, nemate nekdo zkusenosti s Failed request tracingem na IISku ? Mam ho zapnutej a nastavenej, log soubory se me spravne vytvarej ale kdyz ten soubor otevru tak skoro kazdej GENERAL_RESPONSE_ENTITY_BUFFER je zakoncenej TRUNCATED... takze data toho response tam nejsou cely. Zkousel sem i nastavit maxLogFileSizeKb na 2048KB (ty responsy maj ted kolem 200KB) , ale nepomohlo. Nevite nekdo cim by to mohlo bejt ?
    URZA
    URZA --- ---
    ja asi vyzkousim tu HTML5+JS cestu.. ta moje appka bude prave hlavne GUI a velmi malinko logiky (i kdyz by se tam dal vyuzit pekne LINQ:)
    Kliknutím sem můžete změnit nastavení reklam