Rolf b: IOC in MVC-Controller

Beitrag lesen

Ich versteh grad deinen Code nicht. Das ist ein Konstruktor und drumherum stehen doch Dinge - die befinden sich also auf class-Ebene. Eine private Variable für IMyClient. Und dann zwei Zeilen, die eigentlich nur in einer Methode Sinn machen. Muss ich mir da eine Methode drumherum denken?

Bei Konstrukten wie return dataProvider.GetAll() läuten übrigens sofort alle Alarmglocken. Was ist das, was GetAll() zurückliefert? Vermutlich ein IEnumerable<DataClass>, aber es kann verschiedene Implementierungen geben, die dahinter liegen. Ist es eine statische Collection (z.B. List oder Array), ist das Konstrukt unproblematisch. Ist es aber ein IQueryable (weil der dataProvider z.B. zum EntityFramework gehört), dann ist es gut möglich, dass das Queryable erst dann ausgewertet wird, nachdem der Controller und ggf. das IMyClient-Objekt bereits disposed wurde. Das geht dann schief. In solchen Fällen ist es am einfachsten, das Queryable innerhalb der Zugriffsmethode zu materialisieren, also ein .ToArray() oder .ToList() anzuhängen. Aber: Nicht blindlings anhängen. Nachdenken musst Du schon. Wenn Du das falsche anhängst, oder etwas unnötiges, erzeugst Du überflüssigerweise eine Kopie der items-Collection.

Rolf