Krisztián's profileBátyai Krisztián[KRis]PhotosBlogListsMore ![]() | Help |
Bátyai Krisztián[KRis]Ha tudod, hogy egyenesen állsz, ne törődj vele, hogy ferde az árnyékod! vagyis Ha úgy érzed minden az iránításod alatt van, nem mész elég gyorsan!!! Avagy néhány gondolat a következőkről : C# 3.0 WPF WF LINQ Silverlight |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Public folders
October 22 MEF, avagy készítsünk kiterjeszthető alkalmazásokat 0.Előbb vagy útóbb minden fejlesztő szembesül azzal a problémával, hogy olyan alkalmazást kellene írni, amely tulajdonképpen egy keretrendszer bizonyos alapfunkciókkal, amihez idővel újabb és újabb modulok kerülnek majd illesztésre. Ha ez egy zárt projekt, és mi vagyunk a fejlesztői a keretnek és a moduloknak is, akkor nem is biztos hogy “keretrendszert” építünk általános megoldásokkal, hanem egyszerűen add new project, add refenrece, aztán ‘jónapot, had ‘szóljon, hivatkozunk az új dolgokra, rebuild, már mehet is az új exe+dll valahogy a usereknek. Ez a megoldás gyors, egyszerű, ellenben ha sokan dolgozunk a projekten pl. *nd*aiakkal :D, és nem kellőképen dokumentált a fejlesztés módja, akkor egy nagy káosz kialakulásának leszünk jobb esetben csak szemtanui, rosszabb esetben résztvevői. Mit lehet tenni? Alkutunk egy saját leíró nyelvet: XML-ben össze lehet tenni a felületet, algoritmust, szabályokat, stb. Publikáljuk a “leírónyelvünk” specifikációját, és a modul futtatása nem más XML parszolás (saját parszerrel), majd futtatás… Nem marad más hátra, minthogy dll-t gyártatunk az önjelölt modulfejlesztőkkel, amit _nem_ teszünk be a keretalkalmazásba, és ezt a modult valahogy elérjük futási időben. Milyen lehetőségeink vannak Reflection-el?
Assembly a = Assembly.LoadFile(dll_path); Type t = null; foreach (Type item in a.GetTypes()) { if (item.Name == "EztInditsdEl") { t = item; break; } } if (t!= null && t.BaseType == typeof(Form)) { ConstructorInfo ci= t.GetConstructor(new Type[0]); object o= ci.Invoke(null); Form f = o as Form; f.MdiParent = this; f.Show(); } else { throw new Exception("hiba a modulban"); } Persze ezt lehet fokozni, konkrét osztálynevekkel, interfészekkel, attributumokkal, stb. A jól definiált “korlátokat”, kötelezettségeket határozunk meg, amiket be kell tartania a modul fejlesztőjének. namespace ModulBase { public interface IModul { void Kiir(string mitirki); string Beolvas(string kerdes); } } namespace Modul1 { public class MyModul:ModulBase.IModul { #region IModul Members public void Kiir(string mitirki) { Console.WriteLine(mitirki); } public string Beolvas(string kerdes) { Console.Write(kerdes); return Console.ReadLine(); } #endregion } }Alkalmazás: Assembly a = Assembly.LoadFile(dll_path); ModulBase.IModul modul =null; foreach (Type item in a.GetTypes()) { if ((item.GetInterface(typeof(ModulBase.IModul).FullName)) != null) { object o= item.GetConstructor(new Type[0]).Invoke(null); modul = o as ModulBase.IModul; break; } } if (modul != null) { modul.Kiir("alma"); string valasz = modul.Beolvas("barack"); Console.WriteLine(valasz); } else { throw new Exception("hiba a modulban"); } Mint látható itt Reflection-t csak a példányosításra használjuk, utána már az interfészünkön keresztül programozzuk a modult. (persze lehetne még fokozni, rengeteg egyéb ügyesebb-okosabb, de rosszabb megoldás is van…) Rengeteg olyan általános probléma van ami minden moduláris alkalmazásnál előjön. Tipikus generikus problémák amikre tipikus generikus válasz adható… Minek feltalálnunk újra a spanyolviaszt?!?! Ekkor jön be a MEF-Managed Extensibility Framework, amely választ ad ezen generikus problémákra, ill. előbb-útobb a .Net része lesz, vagyis elfogadottá válik, így máris megvan a “szerződés” a keret- ill. a modul-alkalmazás fejlesztője között… A témával egyelőre még nem foglalkoztam sokat, de amit láttam eddig az felkeltette az érdeklődésemet, így útjára indítok egy sorozatot, ami sorra veszi szépen a MEF-es fejlesztés mérföldköveit… October 20 DragDrop Silverlight 3-banVégre! Bár még nem generikus a megoldás, de reméljük az lesz. Egyelőre a következők támogatják az adott vezérlőben a drag&drop-t:
Használatuk ‘rémegyszerű:
xmlns:mswindows="clr-namespace:Microsoft.Windows;assembly=System.Windows.Controls.Toolkit" <toolkit:ListBoxDragDropTarget Name="lb1" > <ListBox Name="lb1"> <ListBox.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Vertical" /> </ItemsPanelTemplate> </ListBox.ItemsPanel> </ListBox> </toolkit:ListBoxDragDropTarget> Ha ezzel megvagyunk, akkor tökéletesen tudunk ide oda rángatni pl. ListBox-ból ListBoxba. A teljes kód (letöltés): <UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="sl3_drag_drop_demo.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mswindows="clr-namespace:Microsoft.Windows;assembly=System.Windows.Controls.Toolkit" xmlns:datatoolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Toolkit" xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"> <Grid x:Name="LayoutRoot"> <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <toolkit:ListBoxDragDropTarget Grid.Column="0" mswindows:DragDrop.AllowDrop="True"> <ListBox Name="lb1" Background="LightBlue" MinWidth="50" MinHeight="150"> <ListBox.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Vertical" /></ItemsPanelTemplate> </ListBox.ItemsPanel> </ListBox> </toolkit:ListBoxDragDropTarget> <toolkit:ListBoxDragDropTarget Grid.Column="1" Drop="ListBoxDragDropTarget_Drop" mswindows:DragDrop.AllowDrop="True"> <ListBox Name="lb2" Background="LightYellow" MinWidth="50" MinHeight="150"> <ListBox.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Vertical" /></ItemsPanelTemplate> </ListBox.ItemsPanel> </ListBox> </toolkit:ListBoxDragDropTarget> <datatoolkit:DataGridDragDropTarget mswindows:DragDrop.AllowDrop="True" Grid.Row="1" Grid.Column="0" > <data:DataGrid Name="grd1" ></data:DataGrid></datatoolkit:DataGridDragDropTarget> <datatoolkit:DataGridDragDropTarget mswindows:DragDrop.AllowDrop="True" Grid.Row="1" Grid.Column="1" > <data:DataGrid Name="grd2"></data:DataGrid></datatoolkit:DataGridDragDropTarget> </Grid> </UserControl> http://timheuer.com/blog/archive/2009/10/19/silverlight-toolkit-adds-drag-drop-support.aspx June 19 .Net 2.0-3.5 AKCIÓS képzések @ NetAcademiaSziasztok! Engedjétek meg, hogy közzétegyek egy kis reklámot. Aki (vagy a cég ahol dolgozik) esetleg mostanában tervezett .Net képzést, annak figyelmébe ajánlom a következő tanfolyamokat:
A fenti táblázatban szereplő tanfolyamok ára a tanfolyam hosszától és a megrendelés leadásának időpontjától függ:
Július 1. után a „fapados” jelentkezési lehetőség véget ér, a tanfolyamokra ezt követően az adott tanfolyam listaárán lehet regisztrálni. SA vouchert elfogadunk! Bővebb információ: www.netacademia.net/nyariakcio April 17 MVPEgy kicsit csendben voltam blog ill. cikk írás dologban az elmúlt hónapokban. Az elmúlt egy-másfél én munkája, köztük a fenti rendezvények, alapján a Microsoft érdemesnek tartott arra hogy tagja legyek a magyarországi MVP csapatnak. Hogy mi is az az MVP cím?!?
A program keretében ezentúl számos dologhoz hozzáférhetek a publikussá válása előtt (persze mindenféle NDA mellett), könnyen kapcsolatot teremthetek mindenféle Product Grouppal az Olimposzon ( Seattle-Redmond-Microsoft HQ), talán még el is juthatok oda jövőre, és még sok minden egyéb… Remélem, hogy így még hasznosabban tudok majd részt venni a hazai .Net életben…
És a lényeg : Rendezvény, meghívó, Azure, Silverlight, Sync Services
Egy Május 4.-én Szegeden megrendezésre kerülő eseményre szeretném felhívni a figyelmet, ahol lesz szerencsém előadni egy témában. Akit érdekelnek a következő témák, és Szeged közelében lakik az jöjjön el:
Az előadásokat Bátorfi Zsolt barátom fogja felvezetni a szokásos :) ‘mivel fogunk találkozni a következő hónapokban, évben a platformon és körülötte témával. Helyszín és időpont: További részletek, jelentkezés : http://devportal.hu/content/usergroupszeged.aspx |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|