• ú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
    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 --- ---
    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:)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    P19: V androidu si to vsechno pises rucne v xml souboru. Podobne jako ve wpf v xamlu.
    P19
    P19 --- ---
    URZA: no prave na to GUI potrebujes ten Mac. Nativne se iOS aplikace pisou v aplikaci XCode, ktera ma i designer. A v Xamarinu pises C#, ale pro designer se musis prave prepnout do MacOS X a naklikat si to v XCode, Xamarin ti to pak zase napoji na C#.
    Teoreticky bys XCode potrebovat nemusel a mohl to vsechno napsat rucne v Xamarinu, ale to je, jako bys rucne psal kod, co ti VS vygeneruje do *.designer.cs souboru u winformu.
    Jak je to s Androidem nemam tuseni.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    URZA: jj, GUI se pro kazdou platformu musi delat zvlast.

    oni tam .net nelinkujou, je to kompilovany primo do nativniho (byte)kodu dotycny platformy.
    URZA
    URZA --- ---
    TENCOKACISTROMY:
    P19: hm hm.. tak nejake realne zkusenosti s xamarinem bych si i rad poslechl.. napr. jak v tom xamarinu resite GUI? jestli jsem to pochopil dobre tak pokud bych chtel iOS a android tak pro kazde musim to gui psat samostatne?

    a jinak s velikosti appky a vykonem zkusenosti nejaky mate? ono to asi naroste tim ze se tam prilinkuji .NET co?

    chci si taky udelat jednu indianskou vec a tak mi to spis vychazi zatim na nejaky html5+phonegap..
    Kliknutím sem můžete změnit nastavení reklam