2009-07-31 7 views
1

Sur un peu d'apprentissage. Sachez qu'un de vos gourous peut m'aider.SubSonic SimpleRepository et Dependency Injection

Je regarde SubSonic (SimpleRepository) et StructureMap. Vraiment essayer d'avoir ma tête autour d'eux tous les deux.

Je souhaite utiliser SimpleRepository pour la facilité d'utilisation et pour permettre à mes modèles de définir la base de données plutôt que de créer ou de créer initialement une structure de base de données.

Je crée une classe concrète qui hérite de SimpleRepository

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

Ajouter à mon Initialisation Application

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

Et maintenant, je suis sûr que partout dans l'application i utilise la même SimpleRepository. Est-ce que je rends cela trop complexe?

Ou suis-je sur la bonne voie ici. Je sais que vous ne connaissez pas tous les autres détails alors parlez-moi aussi dans les généralités. Merci.

+0

Avez-vous regardé DimeCasts.net http://www.dimecasts.net/Casts/ByTag/StructureMap – Podge

+0

Merci Podge. J'ai. Je prends un autre regard pour en savoir plus. J'ai utilisé le modèle que j'ai décrit ci-dessus et ça marche. Pas de véritables hits de performance que j'ai pu remarquer. L'application est en plein essor ici dans les deux prochaines semaines, donc je serai en mesure d'en apprendre plus à ce sujet. – roberocity

Répondre

1

Je pense que vous avez manqué l'une des idées clés de DI ici. Cette idée étant l'utilisation d'interfaces pour extraire le code appelant de la classe concrète qui implémente réellement la fonctionnalité.

public interface IDataRepository { } 

internal class DataRepository : SimpleRepository, IDataRepository 
{ 
} 

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

Maintenant, tout le code client doit résoudre/référencer uniquement l'interface IDataRepository.

+0

Merci. Je vois la relation entre les interfaces et DI. Et comme l'idée de la classe DataRepository étant interne. Cela ne change vraiment pas grand chose à mon code. Il ajoute la possibilité pour qu'il change plus tard depuis son interface. Je suppose que ma vraie question était plutôt de savoir comment j'instanciais le SimpleRepository nécessaire. Dériver ma classe de SimpleRepository et utiliser le constructeur pour obtenir le SimpleRepository correct, puis utiliser DI pour tout assembler. – roberocity

+0

Désolé de ne pas avoir sélectionné ceci comme réponse il y a * longtemps * temps. – roberocity

Questions connexes