2009-07-31 12 views
1

Auf ein bisschen eine Lernkurve. Kenne, dass einer von euch Gurus mir helfen kann.SubSonic SimpleRepository und Dependency Injection

Ich untersuche SubSonic (SimpleRepository) und StructureMap. Ich versuche wirklich, meinen Kopf um sie beide zu bekommen.

Ich möchte SimpleRepository für die Benutzerfreundlichkeit verwenden und lassen meine Modelle die Datenbank definieren, anstatt zunächst eine DB-Struktur abzuziehen oder zu erstellen.

ich eine konkrete Klasse, die

public class DataRepository : SimpleRepository 
{ 
    public DataRepository() : 
     base("Application", SimpleRepositoryOptions.RunMigrations) 
     { } 
} 

In meiner Anwendungsinitialisierung

ObjectFactory.Initialize(
    x => x.ForRequestedType<DataRepository>() 
     .TheDefaultIsConcreteType<DataRepository>() 
     .CacheBy(InstanceScope.Hybrid)); 

Und jetzt, wo überall verwende ich bin sicher, dass die gleichen SimpleRepository i in der App von SimpleRepository erbt.

Mache ich das zu komplex? Oder bin ich hier richtig? Ich weiß, dass du nicht alle anderen Einzelheiten kennst, also sprich mit mir auch allgemein. Vielen Dank.

+0

Haben Sie sich DimeCasts.net http://www.dimecasts.net/Casts/ByTag/StructureMap – Podge

+0

Dank Podge angesehen. Ich habe. Ich schaue nochmal nach, um mehr zu erfahren. Ich habe das Modell verwendet, das ich oben beschrieben habe, und es hat funktioniert. Keine wirklichen Performance-Hits, die ich bemerkt habe. Die App wird in den nächsten Wochen in vollem Gange sein, damit ich mehr davon lernen kann. – roberocity

Antwort

1

Ich denke, Sie haben eine der Kernideen von DI hier verpasst. Diese Idee ist die Verwendung von Schnittstellen, um den aufrufenden Code von der konkreten Klasse zu abstrahieren, die die Funktionalität tatsächlich implementiert.

public interface IDataRepository { } 

internal class DataRepository : SimpleRepository, IDataRepository 
{ 
} 

ObjectFactory.Initialize(
    x => x.ForRequestedType<IDataRepository>() 
     .TheDefaultIsConcreteType<DataRepository>() 
     .CacheBy(InstanceScope.Hybrid)); 

Jetzt sollte der gesamte Client-Code nur die IDataRepository-Schnittstelle auflösen/referenzieren.

+0

Danke. Ich sehe die Beziehung zwischen Schnittstellen und DI. Und wie die Idee, dass die DataRepository-Klasse intern ist. Es ändert wirklich meinen Code nicht viel. Es fügt die Fähigkeit hinzu, es später seit seiner Schnittstelle zu ändern. Ich denke, meine eigentliche Frage war mehr, wie ich das SimpleRepository instanziiert, das benötigt wird. Ableiten meiner Klasse von SimpleRepository und Verwenden des Konstruktors, um das richtige SimpleRepository zu erhalten und dann DI zu verwenden, um alles zusammenzufassen. – roberocity

+0

Entschuldigung dafür, dass Sie dies nicht als Antwort vor einer * langen * Zeit ausgewählt haben. – roberocity