Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Peter Bucher
Thema: DI/IoC in der Praxis (und korrekter Aufbau der zugehörigen Klassen)
Am im Forum: Rund um die Programmierung

Hallo haarrrgh

Genau, das was FZelle geschrieben hat geht in diese Richtung.
Ich versuche das mal einfach zu erklären.

Bei der impliziten Anwendung geht es darum, das du an einem Ort ein container.Resolve<IFoo>() drin hast. Das kannst du dir als Resolution-Root vorstellen, also die Wurzel, wo die Auflösung beginnt.

Wenn das jetzt nicht ein IFoo, sondern bspw. ein IController ist, enthält er und seine Objekte komplett alles, was nötig ist (Bei einem ASP.NET MVC Request).

Der Container löst nach diesem einen expliziten Aufruf dann implizit 1, oder soviele Abhängigkeiten und Unterabhängigkeiten auf, wie gefordert sind.

(Expliziter Resolve Aufruf: Resolve<MeinController>();)
IController
 - ICustomRepository (implizit)
   - ILogger (implizit)
 - ILogger (implizit)
 - ISessionService (implizit)

...

Bei expliziter Anwendung würde das CustomerRepository explizit einen Logger erstellen, usw.

Klarer?


Gruss Peter

Thema: Hat der PC als Spielplattform ausgedient?
Am im Forum: Smalltalk

Hallo Michael

Da kann ich zustimmen:
- schnelles Spiel
- sowieso keine Zeit
- PC ist für alles andere auch nutzbar
- Und natürlich die Multiplayer-Beschränkung der Konsolen :-)


Gruss Peter

Thema: ASP.net MVC2 Webanwendung. Akteller Menüpunkt hervorheben.
Am im Forum: Web-Technologien

Hallo Mausschubser

Kommt darauf an, was du verwendest und wie.
Es ist eigentlich relativ einfach und logisch. Du musst schauen, ob der aktuelle Menüpunkt == aktuelle Seite ist.

Das ist der einfachste Fall. In einem komplexeren müsstest du das für mehrere Punkte in einer Hierarchie machen.
Aber schlussendlich ist die Logik gleich.

Ein Beispiel mit WebForms, das dies ein bisschen zeigt:
- Ein simples Listen Menü mit ASP.NET

Wenn du doch nicht weiterkommst, zeige bitte das was du bisher hast. Das relevante. Dann können wir weiterschauen.


Gruss Peter

Thema: Delegaten Dynamisch auf eine Methode mappen
Am im Forum: Rund um die Programmierung

Salute Pria

Wenn ich das richtig verstehe, schaut die Antwort von zommi am brauchbarsten für dich aus.


Gruss Peter

Thema: Statische Objekte in Page_Load Methode sind null.
Am im Forum: Web-Technologien

Hoi Michael

Die web.config Einträge sind auf den gesamten Namespace in der genannten Assembly gültig, also für mehrere Controls darin.

Die letzten geposteten, mit denen es funktioniert sind jeweils explizit auf ein Control.
Sieht also eher nach einem Namespace-Konflikt / Namen-Konflikt aus.


Gruss Peter

Thema: Gmail File Sender - Dateien schnell und einfach über Gmail versenden.
Am im Forum: Projekte

Hallo Lukas

Die Anwendung sieht interessant aus.

Zitat von kleines_eichhoernchen
Zitat
(Das Passwort wird aus Sicherheitsgründen NICHT gespeichrt und muss bei jedem Start wieder eingegeben werden.)
Das find ich persönlich nicht so toll. OK wäre es wenn die erfolgreiche Anmeldung über Cookies gespeichert wird und ich mich so wie bei google üblich nur ab und zu anmelden muss. Bei google gibts ein Cookie SID, ich nehme an, das ist für die Anmeldung gedacht.
Da stimme ich zu.
Auch zusätzlich: Jedesmal das Kennwort neu eingeben ist bei so einem kleinen Tool nicht drin. Die Sicherheitsgründe sind m.E. auch eher unbegründet.

Ich würde da ein Haken setzen: [ ] Passwort speichern.
Sicherheitsbedenken sind bei solchen Programmen eher darin zu sehen, ob sie die Zugangsdaten ob mit oder ohne (sichtbares) Speichern, irgendwo hin schicken ;-).


Gruss Peter

Thema: CommandEventHandler reagiert nicht
Am im Forum: Web-Technologien

Salute Odaiko

Schau mal hier:
- http://www.aspnetzone.de/blogs/peterbucher/archive/2007/04/09/artikel-identifizierung-von-controls-control-id-clientid-uniqueid.aspx
- http://www.aspnetzone.de/blogs/peterbucher/archive/2008/09/02/zwei-ans-tze-wie-mit-den-clientids-von-asp-net-umgegangen-werden-kann.aspx

Mit jQuery und _eindeutigen IDs_ kannst du auch ein "Contains" verwenden, um nach der ID zu suchen.


Gruss Peter

Thema: Welches Entwicklungstool? Webapplikation für IPhoneOS4, Android2.x, Windows7 und OSX Snow Leopard
Am im Forum: Web-Technologien

Salute zusammen

Zitat von Mausschubser
Also ehrlich gesagt habe ich mich jetzt auf ASP.NET (WebForms) mit MVP Muster eingestellt. Dieses Muster ist für mich irgendwie einfacher, strukturierter und vor allem übersichtlicher. Gibt es da grundlegende Performance und / oder Kompatibilität Nachteile gegenüber MVC2? Deine angegebene Reaktionszeit von bis zu 3 Sekunden auf was bezieht die sich? Habe ich die bei WebForms und bei MVC2 nicht oder generell bei ASP.net? Wie muss ich das verstehen?
Nun, das Hauptproblem von ASP.NET _WebForms_ an sich, ist die zu starke Abstraktion von der Statuslosigkeit. Auch vom HTML, von so ziemlich allem.
Dadurch entsteht beim Einstieg ins Web mit WebForms meistens kein gutes Grundlagewissen der darunterliegenden Technologien, wie HTML / Javascript / CSS und Frameworks wie bspw. jQuery.

Die 3 Sekunden bezogen sich auf Edge - die langsamste mobile Anbindung zur Zeit in CH - die theoretisch 128kbit beträgt.
Damit wollte ich darauf hinweisen, das bei der Nutzung einer solchen Verbindung für den PC, sehr, sehr viele heutige Webseiten unbenutzbar werden. Sei es wegen der Grösse zum Herunterladen, oder aber einem Timeout, sei das server- oder clientseitig. Für AJAX ist das meistens zu langsam, das nach 2, 3 Sekunden ein Popup mit "callback / script timeout" auftritt. Beispiel: Twitter Seite.
Zitat von Mausschubser
Das hört sich so an, dass ich Ajax besser nicht verwenden soll!? Betrifft das die Performance und/oder die Kompatibilität? Gerade die Ajaxkomponenten wie z.B. "Accordion" will ich massiv einsetzen. Welche alternativen gibt es denn da?
Nein, das wollte ich definitiv nicht damit aussagen.
Man muss sich aber bewusst sein, das bei der Nutzung eines schwergewichtigen Frameworks das (noch schlimmer) auch noch in serverseitige Komponente abstrahiert ist (ASP.NET AJAX), zu einem riesen Overhead und teilweise sogar Hänger der Seite bei aktuellen PCs und Verbindungen verursachen können.

Das kommt schlussentlich von dem generierten Code, der parallel mit der Anzahl Komponenten wächst. Siehe: Dritthersteller Controls.

Wenn langsamere Computer sowie mobile Geräte und langsame Verbindungen berücksichtigt werden (und das sollten sie im _Internet_ Fall eigentlich immer), ist es besser, den clientseitigen Code selber zu schreiben, bzw. ein leichteres Framework einzusetzen, oder oben genannte Komponente / Frameworks sehr sparsam und kontrolliert einzusetzen.
Zitat von Mausschubser
Ich meine halt, dass WebFormsMVP nicht besser, aber produktiver ist.
Inwiefern?
Du hast überhaupt keine Tool-Unterstützung, kein richtig erwachsenes und etabliertes Framework.
Das ist Microsoft mit ASP.NET MVC und der Visual Studio Integration schon viel angenehmer.


Gruss Peter

Thema: Hat der PC als Spielplattform ausgedient?
Am im Forum: Smalltalk

Salute zusammen

Zitat von herbivore
Die größere Gefahr sehe ich ohnehin nicht in Firmen, die sich vom PC abwenden sondern darin, dass die ehrlichen Käufer von PC-Spielen immer stärker gegängelt werden, z.B. durch Online-Aktivierungen oder gar dauerhafte Onlineprüfungen in Solokampagnen, die einen von der Gnade oder auch nur Weiterexistenz der Hersteller abhängig machen und außerdem oftmals zur Unterkäuflichkeit von "gebrauchen" Spielen führen.
Die Tendenz geht dahin, ja.
Aber auch bei Konsolenspielen kommt das, oder ist schon lange da. Da viele sowieso praktisch nur online gespielt werden und da eine Anmeldung über Steam / XBox-Live, etc... normal ist.

Mit dem PC ist es im Prinzip dasselbe, bis auf das der Kopierschutz / die Verschlüsselung stärker ist, da er leichter geknackt werden kann, oder wird.

Das Ende dieser Ära ist aber bestimmt noch nicht da und wird auch nicht kommen.
Wenn man sich die Konsolenentwicklung anschaut, gehen die Konsolen immer mehr in Richtung PC, nicht die PCs Richtung Konsole.

Stichworte: Maus, Tastatur, Prozessor, Systemkomponenten...

Mit ersteren zwei Stichworten - und auch wenn die erst richtig gut funktionieren - könnte eine Ablösung realistischer werden.
Aber auch Fernseher oder Bildschirm machen einen Unterschied, auch wenn nicht mehr so stark, bei den aktuellen Technologien.

Egoshooter, Echtzeitstrategie und bei der Emulierung wird der PC noch längere Zeit die Nase vorne haben, schätze ich.

PC für Bastler und Konsole für Bastler die es leid sind, oder solche die nicht wissen wie.
Und tja, das Konsolenspiele praktisch immer von besserer Qualität sind und das sogar in einem kleineren Entwicklungszyklus, ist auch nicht weiter verwunderlich.

Gegeben: Ein PC / Notebook / Deriverat das aus abertausenden verschiedenen Komponenten bestehen kann.

Gegeben: Eine Konsole, die in praktisch jedem Fall aus den gleichen Komponenten besteht.

Dasselbe bei der Software - wobei dort eine einigermassen einheitliche Voraussetzung gesetzt werden kann.

Unter diesen Bedingungen ist es um ein vielfaches schwieriger bzw. teuerer, ein gleich Qualitatives Spiel zum gleichen Preis und vorallem im gleichen Entwicklungszeitraum zu liefern.

Ich nehme auch die halbherzigen Konsolenumsetzungen für den PC wahr, die schon seit Jahren herumschwirren.
Beispiel der XBox360: Mashed: Fully Loaded. Ein geniales Spiel auf der Konsole. Die PC Umsetzung ist im Menü, sowie auch im Spiel praktisch nicht bedienbar. Bei dem Spiel kommt aber noch hinzu, das es besser für Game-Controller geeignet ist.


Gruss Peter

Thema: CommandEventHandler reagiert nicht
Am im Forum: Web-Technologien

Halo Odaiko

Neue Fragen in Zukunft bitte in einen neuen Thread, danke.
Ans Seitenende im Browser, am Client?

Javascript rendern, das die Sache übernimmt.
Der letzte Satz verstehe ich nicht.


Gruss Peter

Thema: Statische Objekte in Page_Load Methode sind null.
Am im Forum: Web-Technologien

Salute Michael

Also per Designer reingezogen, oder von Hand reingeschrieben?
Wie sieht diese Registrierung dann aus, die funktioniert?
Hast du im Verzeichnis /Admin/ noch eine andere web.config?


Gruss Peter

Thema: CommandEventHandler reagiert nicht
Am im Forum: Web-Technologien

Salute Odaiko

Die Zelle, die Row, die Table hängst du dann schlussendlich in den Control-Tree (Schlussendlich an Page.Controls)?.

Wenn ja: Zu welchem Zeitpunkt?
Spätestens in OnLoad, besser OnInit.
Alles spätere kann zu Problemen führen, insbesondere mit Events.


Gruss Peter

Thema: Generische Basisklasse, spezielle Unterklasse, Erzeugung über Factorymethod
Am im Forum: Rund um die Programmierung

Hoi serial

IoC / DI :-)

Und nein, um den Cast kommst du nicht herum, wenn du auf dem Typen Repository<T> arbeitest.

Daher würde ich eher empfehlen, zumindest für das NewsRepository einen eigenen Kontrakt (Interface) zu benutzen, was dann auch z.B. IRepository<T> implementiert.

Danach: Entweder eigene Instanziierung oder IoC / DI.
Generalisierung ist gut und schön, aber in diesem Fall schadet sie dir mehr, als sie nützt.
Du kannst aber die Generalisierung (Repository<T> / IRepository<T>) nutzen, wo du nur das brauchst.

Ansonsten musst du casten oder erzeugst dir direkt ein NewsRepository.


Gruss Peter

Thema: Statische Objekte in Page_Load Methode sind null.
Am im Forum: Web-Technologien

Salute Michael

Ich habe mir das Projekt mal "kurz" angeguckt.
- Url Rewriting oder nicht, macht keinen Unterschied
- Controls sind m.E. korrekt registriert
- Default.aspx passt
- Das Control auf den ersten Blick auch. Jedoch tritt genau in dem Control dasselbe auch mit <asp:TextBox ID="test" runat="server" /> auf

So gesehen würde ich den Fehler auf das Control eingrenzen, erstmal.
Und allgemein: Alles unnötige, potentielle Fehlerquellen entfernen. Aber ohne Url Rewriting gibts nicht mehr wirklich viel......

Ich hoffe das hilft dir ein wenig weiter. Berichte dann.


Gruss Peter

Thema: Welches Entwicklungstool? Webapplikation für IPhoneOS4, Android2.x, Windows7 und OSX Snow Leopard
Am im Forum: Web-Technologien

Salute Mausschuppser

HTML, CSS und Javascript :-).
Serverseitig würde ich auch ASP.NET MVC empfehlen, da du hier schon out-of-the-box den kleinsten Quellcode-Overhead hast und auch die Kontrolle besser ist.
Das ist umso wichtiger bei einer mobilen Anwendung, da die Konsumenten vielfach auch nur Edge Empfang haben.

Auch wenn es theoretisch gebündeltem ISDN (128kbit) entspricht - bei vollem Empfang - gibt es da Reaktionszeiten jenseits von einer Sekunde bis zu 3 Sekunden.

Also lautet die erste Regel: Quellcode / Bilder / Medien klein halten und ggf. komprimieren.
Auch mit den "normalen" Hausmitteln, die ich oben aufgezählt habe, kannst du schon viel schief machen. Ganz abgesehen von AJAX.

Ich würde zusätzlich zu ASP.NET MVC auf jQuery setzen. Diese Bibliothek ist schon integriert (Einfach neue Version drüberkopieren) und besitzt durch Tricks schlussendlich an die 100% Browserkompatibalität.

Dann gibt es da noch die Header, die Clients mitschicken. So kannst du ein Android, iPhone, .... oder ein normaler Desktopbrowser unterscheiden und so ggf. eine angepasste Variante liefern (Stichwort: Templates).

Es gibt dann auch noch spezielle Tags, die von den mobilen Clients gelesen und interpretiert werden können. Um Beispielsweise eine Frage nativ am Gerät zu bekommen, ob explizit auf die mobile Variante gewechselt werden soll, oder nicht.

Ansonsten, einfach fragen.


Gruss Peter

Thema: Statische Objekte in Page_Load Methode sind null.
Am im Forum: Web-Technologien

Salute Michael

Extrahiere mal das notwendige für eine Nachvollziehbarkeit.
Dann machst du ein neues Projekt und baust das Notwendige ein.

Tritt dort der selbe Fehler auf?


Gruss Peter

Thema: DI/IoC in der Praxis (und korrekter Aufbau der zugehörigen Klassen)
Am im Forum: Rund um die Programmierung

Salute haarrrgh

Zitat von haarrrgh
Hmm...wieder auf mein Beispiel mit den Aufträgen bezogen...hast Du sowas gemeint?
Ja genau, die Url auf lightcore stimmt auch, sowie auch der Absatz.
Weiter unten findest du noch die Möglichkteiten mit Func<T> und Lazy<T>.
Zitat von haarrrgh
Auch wenn ich den Container hier wenigstens nicht direkt anspreche sondern injizieren lasse, ein Service Locator ist das Ganze trotzdem.
Und es gibt ja auch genug Leute die sagen, Service Locator ist ein Anti-Pattern und sollte niemals und wirklich NIEMALS benutzt werden.
Ja, sozusagen ist das ein Service Locator, jedoch schöner, da nicht statisch und von Aussen schlussendlich auch änderbar.
Service Locator ist höchstens eine Art Antipattern, wenn du nicht DI nutzt, sondern überall nur Service Locator.

Aber besser überall Service Locator als gar nichts. Jedoch am besten überall DI und nur an den benötigten Stellen (Keine Kontrolle über die Instanziierung) Service Locator nutzen (bspw. in Attributen), dort geht es nicht anders.

In diesem Fall ist das also eine Kombination aus der impliziten und expliziten Anwendung. Und explizit (Service Locator) nur dort, wo es implizit (per DI) nicht mögich ist.
In diesem Fall ist das sicherlich kein Antipattern, sondern normale Vorgehensweise, die einzig mögliche. Ausser einer normalen Instanziierung ;-).
Zitat von haarrrgh
Ich sehe ein daß der Service Locator dem "Don't call us, we call you"-Prinzip widerspricht (das ist immer die Begründung warum der SL ein Anti-Pattern sein soll), aber ist das so schlimm?
Nein, siehe die Antwort oben. Die Hollywood Geschichte ist nur eine Analogie, um DI zu verstehen / verinnerlichen.
Zitat von haarrrgh
Also ist das wirklich die beste Lösung für mein Problem?
Das kann ich dir nicht sagen :-).
Auch dort brauchst du ggf. auch noch Service Location, wenn du bspw. mit ASP.NET MVC arbeitest kommst du um Attribute nicht hin, und das du dort dann Service Location nutzen musst, daran hilft auch ein anderes Pattern nicht.

Der Vorschlag von VizOne hört sich auf jeden Fall interessant an. Allerdings würde ich mich mal auf ein paar neue Dinge beschränken, auf diese konzentrieren und diese umsetzen.
Also schrittweise rangehen und bedenken: Es gibt keine beste oder perfekte Lösung im eigentlichen Sinne. Und wenn, dann lohnt sich die Suche danach meistens nicht. 80 / 20 Prinzip :)


Ich denke, wenn du die grundlegenden Dinge, die wir hier besprochen haben, verstanden hast - was ich durch deine Antworten annehme - bist du schon gut dabei.


Grüsse aus Luzern, Peter

Thema: Suche Versionsverwaltung
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Salute haarrrgh

Schlussendlich ist es nicht so wichtig welches man verwendet, sondern das man eins verwendet.
Und das alle bisher genannten sowohl für den Privat- aber auch Professionellen-Einsatz mehr als taugen, steht ausser Frage.

Wie du schon gemeint hast, ist es Ansichtssache. Und ich habe einfach mal meine Ansicht weitergegeben.

Zu den Problemen: Solche habe ich nicht gehabt. Aber das ist wohl auch individuell. Klar hatte ich auch Problemchen, aber deren Lösungen hat man schnell gefunden und auch angewendet.


Gruss Peter

Thema: Suche Versionsverwaltung
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Salute zusammen

Für Anfänger mit Versionisierungssystemen auf Windows empfehle ich stark SVN.
Die anderen genannten Systeme sind (evt. nicht zwangssweise) verteilt (distributed) und haben daher schon mal eine höhere Lernkurve.

Zusätzlich ist der Tool-Support für .NET / VS bei SVN sehr ausgeprägt und schon ausgereift.


Gruss Peter

Thema: Suche Versionsverwaltung
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Salute csofti

Tortoise SVN + Visual SVN (alternativ AnkhSVN).


Gruss Peter

Thema: control.ID, control.ClientID, control.Unique.ID = Alles dasselbe?
Am im Forum: Web-Technologien

Salute schuppsl

Schau dir mal ASP.NET MVC an :-).


Gruss Peter

Thema: Unterschied Methoden / Funktionen
Am im Forum: Rund um die Programmierung

Salute bloggeroli

Ich nutze hier Methode als allgemeine Bezeichnung für eine Funktion / Methode.

In anderen Sprachen / Technologien wird zwischen Funktion und Prozedur unterschieden.
Von einer Funktion wird gesprochen, wenn die Methode einen Rückgabewert hat - also einen Wert zurückliefern kann.
Ergo wird von einer Prozedur gesprochen, wenn die Methode keinen Rückgabewert hat, bzw. als Rückgabewert - am Beispiel von C# - void (nichts) trägt.

In .NET wird - wie gfoidl schon angemerkt hat - beides als Methoden bezeichnet. Einmal "Methode ohne Rückgabewert" oder "Methode mit Rückgabewert".


Gruss Peter

Thema: control.ID, control.ClientID, control.Unique.ID = Alles dasselbe?
Am im Forum: Web-Technologien

Hoi schuppsl

Das Beispielprojekt:
- http://www.aspnetzone.de/files/folders/201358/download.aspx

Ich sehe dein Problem jetzt. Hört sich jetzt zu einfach an, aber du _musst_ dich an den Lifecycle halten, anders gehts nur mit Krücken.

Und das geht auch in fast jedem Fall. Im schlechtesten Fall musst du halt deine komplette Reihenfolge ein bisschen auf den Kopf stellen.

Wenn du das nicht magst, oder es einfach nicht gehen will, machs einfacher.
Nutze die Lösung von Wilco (http://www.wilcob.com/Wilco/News/AspNetIDOverride.aspx).
Nur hat der liebe Wilco den Content von der Seite genommen und angekündigt, er stelle das Zeugs langsam dann wieder hoch, was aber noch nicht passiert ist.

Darum würde ich vorschlagen du suchst einfach mal nach "ASP.NET ID Override".


Gruss Peter

Thema: PMs als E-Mail / PMs exportieren
Am im Forum: Wünsche und Kritik

Salute herbivore

Genial, danke! :-)


Gruss Peter

Thema: HttpModule wird bei aufruf einer nicht vorhandenen .aspx nicht aufgerufen
Am im Forum: Web-Technologien

Hoi serial

Zitat von serial
Komisch ist allerdings folgendes:

wenn ich die url aufrufe (http://www.meinedomain/nichtvorhandeneRessource
wird das Module aufgerufen, aber beihttp://www.meinedomain.de/nichtvorhandeneRessource.aspx wird er nicht aufgerufen, aber es fliegt vorher ein 404-Fehler.

Habe ich nur ein fehler im denken, oder müsste das module nicht in allen fällen aufgerufen werden?
Und in welcher Konfiguration passiert das so?


Gruss Peter

Thema: Wo / wie (Benutzer)-Berechtigungen aus XML speichern?
Am im Forum: Web-Technologien

Hallo MarsStein

Ja, das stimmt allerdings im konkreten Fall.
Meine Aussage war ein bisschen zu allgemein gehalten.


Gruss Peter

Thema: Wo / wie (Benutzer)-Berechtigungen aus XML speichern?
Am im Forum: Web-Technologien

Hallo zusammen

Wenn die Berechtigungen eines einzelnen Benutzers gespeicher werden, sieht das nach Session aus.
Ist es allerdings eine komplette Liste mit allen Berechtigungen für alle Benutzer, wo dann je nach Benutzer nach einer Abfrage die jeweiligen Berechtigungen geholt werden, kann man das Anwendungsglobal machen.


Gruss Peter

Thema: ASP Globale Werte laden || Performance
Am im Forum: Web-Technologien

Hoi Diräkt

I/O-Zugriffe sind das teuerste, was vorallem bei einer Mehrbenutzeranwendung zum tragen kommt.
Wenn du das pro Request machst, oder sogar mehrfach pro Request, kommt da schnell was zusammen.

Daher würde ich genau gucken:
- Benutzerspezifisch => Session
- Anwendungsglobal und kein Änderungsbedarf zur Laufzeit => Application
- Anwendungsglobal und ggf. einen Änderngsbedarf zur Laufzeit => Application + Locking

Auch wenn du nur ein Byte ausliest, das teuer ist nicht die Datenmenge, sondern das du überhaupt einen I/O-Zugriff machst.

Dazu zählen Festplatten, sowie auch Netzwerkzugriffe. Dort bist du auch nie gefeit vor Timeouts oder eben dann Engpässe.


Gruss Peter

Thema: ASP.NET Erstellen von PNG Image erzwing Save-Dialog
Am im Forum: Web-Technologien

Salute DomiOh

Inline passt. Dann kontrolliere mal deine Browsereinstellungen, leere den Cache oder probiere es testweise an einem anderen Computer / Browser aus.


Gruss Peter

Thema: DI/IoC in der Praxis (und korrekter Aufbau der zugehörigen Klassen)
Am im Forum: Rund um die Programmierung

Salute haarrrgh

Zitat von haarrrgh
Ich stelle mit Freude fest daß Du mehr oder weniger genau das geschrieben hast, worauf ich in den letzten 2 Stunden auch selber gekommen bin.
Das ist ein gutes Zeichen...anscheinend bin ich auf dem richtigen Weg 8)
Ja, das ist doch super! :)
Zitat von haarrrgh
c) Ist es ok, daß die Methode CreateAuftrag sich selbst den Artikel erzeugt?
Oder anders formuliert: DI bedeutet nicht unbedingt daß der AuftragService den kompletten fertigen Artikel von außen bekommt...der Artikel kann auch ruhig innerhalb der Klasse erst erzeugt werden solange dazu ein Repository oder eine Factory benutzt werden, die wiederum von außen injiziert werden.
Richtig?
Ja, genau!

Das ist das was ich mit oberem Beitrag sagen wollte :-)
Zitat von haarrrgh
e) Analog Deinem eigenen Vorgehen:
Zitat
...ein Objekt, dass mit dem DI-Container erzeugt wird, sollte bei der Erzeugung nur die Informationen benötigen, die der Container sich selbst zusammensuchen kann

...hat der Container in meinem Beispiel also nur die eine Aufgabe, dem AuftragService die konkreten Repositories zu injizieren, und sonst gar nichts.
Nach manchen Artikeln die ich gelesen habe hatte ich den Eindruck als sei der Container DAS zentrale Element der Applikation, über das sämtliche benutzten Objekte erzeugt werden, aber das war dann wohl auch ein bißchen übertrieben.
Ich glaube VizOne ging es darum, wie sich der Container an sich verhalten soll, nicht die Benutzung dessen.
Trotzdem ist deine Frage legitim.

Der Container ist nicht wirklich _das_ zentrale Element.
Er ist zwar immer da, wird / sollte / müsste aber nur als Startpunkt für einen Objektbaum angesehen werden.

D.h. am Beispiel von ASP.NET MVC, das alle benötigten (direkten) Abhängigkeiten über den Container injiziert werden. Haben diese Abhängigkeiten auch wieder (direkte) Abhängigkeiten, geht es weiter, bis die Sache befriedigt ist.

Für dich ist nur wichtig, das du schlussendlich dein Repository hast, das du nutzen kannst, das bspw. einen Logger enthält, den du global für die gesamte Anwendung auch einfach mal tauschen kannst.

IoC anwenden sollte man auch nur, wo es Sinn ergibt. Ein Beispiel für wenig bis keinen Sinn wäre mein oben stehender Beitrag mit den indirekten Abhängigkeiten.
Zitat von haarrrgh
Der Konstruktor meines AuftragService hat in diesem Beispiel schon 2 Parameter, in Wirklichkeit wären es eigentlich 3 (ich brauche ja auch noch einen Kunden, also würde er auch noch ein IKundeRepository bekommen).
Wenn der AuftragsService noch mehr Methoden hat brauchen die vielleicht noch andere Repositories, das würde noch ein paar mehr Parameter bedeuten.
Gleichzeitig werden ArtikelRepository und KundeRepository in den anderen Methoden vielleicht gar nicht gebraucht.
Habe ich dann trotzdem nur einen Konstruktor mit allen Parametern und die werden bei jedem neuen AuftragService ALLE injiziert (und daß die Hälfte nicht gebraucht wird, macht nichts, weil die Erzeugung nicht viel kostet)?
Oder ist das ein Zeichen daß die AuftragService-Klasse zuviel macht und besser in mehrere Klassen aufgeteilt werden sollte?
1. Du solltest dir nicht unbedingt vorgängig Gedanken um die Performance machen, wenn du noch keine Probleme damit hast (premature optimization is the root of all evil.
2. Trotzdem ist die Frage nicht unbekannt und es gibt Lösungen dazu.

Es kann ein Zeichen sein, das die Klasse zuviel (Mehr als eine) Verantwortlichkeit inne hält. In dem Fall sehe ich das sogar als deutliches Zeichen.

Wenn du eine Instanz vom Container evt. gar nicht oder nur lokal benötigst, gibt es auch Möglichkeiten.
Du kannst bei den meisten Containern entweder den Container selber (Meistens IContainer), eine Factory (In der Form von Func<KundenRepository>), oder sogar einer Lazy-Variante (Lazy<KundenRepository) - d.h. wenn einmal benutzt, wird die Instanz wiederverwendet - injizieren.

Damit kannst du dann nur lokal benötigte Instanzen erstellen, oder die Performance steigern.

Wie das ungefähr aussehen könnte, kannst du anhand von LightCore hier sehen:
- (Im Moment ist die Seite nicht erreichbar, DNS-Probleme :-().


Gruss Peter