Si vous voulez créer une architecture connectable pour pouvoir échanger sur la couche de dépôt à la volée, vous devrez créez tout derrière une interface, puis utilisez quelque chose comme StructureMap pour échanger dynamiquement ce dont vous avez besoin quand vous en avez besoin.
Vous voudriez définir une classe de référentiel comme AccountRepository. Un pour linq à sql LSAccountRepository et EFAccountRepository. Ces deux hériterait de IAccountRepository et ont des méthodes telles que GetAccountByID, SaveAccount, DeleteAccount, etc.
Ensuite, en utilisant StructureMap vous auriez la syntaxe comme si pour charger le référentiel approprié en fonction du système que vous chargez dans.
IAccountRepository _accountRepository = ObjectFactory.GetInstance();
Ensuite, via votre configuration, vous pouvez spécifier l'implémentation par défaut de IAccountRepository et l'échanger pour pointer vers l'une ou l'autre des implémentations à tout moment.
Si cela est trop complexe, alors un schéma d'injection de dépendance peut être utilisé en ce que vous pouvez avoir une méthode avec un paramètre de IAccountRepository.Cette méthode serait appelée par un contrôleur (MVP ou MVC) et vous pouvez transmettre la référence appropriée à ce moment-là. De cette façon, vous n'instanciez pas directement le référentiel à l'intérieur de la méthode qui pourrait avoir besoin d'un référentiel par rapport à un autre.
Même si vous décidez de créer un motif DI, vous pouvez toujours utiliser StructureMap. Lorsque vous instanciez un objet ayant d'autres dépendances que StructureMap connaît (dans le constructeur), alors StructureMap chargera également ces objets. Ensuite, l'appelant de l'objet qui a la méthode dont vous avez besoin sera le seul couplage libre qui sera nécessaire car StructureMap s'occupera dynamiquement du sale boulot pour vous.