StructureMap - Constructeur par défaut Blues
-
21-12-2019 - |
Question
Je vais fou donc j'ai eu ceci
public class FrameworkDbTestBase : IDisposable
{
protected readonly FrameworkDb Db;
public FrameworkDbTestBase()
{
var connection = Effort.DbConnectionFactory.CreateTransient();
Db = new FrameworkDb(connection);
}
public void Dispose()
{
Db.Dispose();
}
}
Ceci se moque de l'EF6 avec effort. J'adore cela pour que je puisse effectuer continuellement des tests en arrière-plan alors que tous les changements se passent contre mon codebase ... c'est génial mais malheureusement, j'ai besoin de cette
public partial class FrameworkDb : DbContext
{
public FrameworkDb() : base("DefaultConnection"){}
public FrameworkDb(DbConnection connection): base(connection, true)
{
Configuration.LazyLoadingEnabled = false;
}
public DbSet<Site> Sites { get; set; }
...
Pour obtenir la moqueur d'EF6 avec des efforts déployés, StructumeMap insiste sur la création d'une instance CadrewareDBB avec le constructeur long avec le paramètre d'injection de DBConnection, donc je reçois ceci:
StructureMap.StructureMapException was unhandled by user code
HResult=-2146232832
Message=StructureMap Exception Code: 202
No Default Instance defined for PluginFamily System.Data.Common.DbConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Source=StructureMap
ErrorCode=202
soupir! Je roule mes yeux ... Je veux StructureMap de m'utiliser l'autre constructeur plus court, donc après quelques creux selon ce post: Carte de la structure - Je ne veux pas utiliser le constructeur le plus gourmandisé! Je devrais changer ceci:
For<FrameworkDb>().Use <FrameworkDb>();
à ce
For<FrameworkDb>().Use(() => new FrameworkDb());
Pas de bonne chance encore la même erreur ... et je ne veux pas supprimer le constructeur de la connexion, mon test d'intégration ne fonctionne plus ... Donc, peut-être qu'il utilise uniquement la connexion de la cartographie et ne l'utilise pas réellement dans l'injection lui-même ... pas de bonne chance ... Ajout de cela:
For<DbConnection>().Use(() => new EntityConnection("DefaultConnection"));
me donne que:
StructureMap.StructureMapException was unhandled by user code
HResult=-2146232832
Message=StructureMap Exception Code: 207
Internal exception while creating Instance '00fbcc4f-c5f0-4eb3-b814-9d0ba1bb8e19' of PluginType System.Data.Common.DbConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. Check the inner exception for more details.
Source=StructureMap
ErrorCode=207
Bien tellement pour cette théorie ... ahum ... Solution Toute personne? Hellooo quelqu'un? Soupir ...
La solution
viens les gens personne?La réponse est si simple ... bien
var framework = new Framework();
For<FrameworkDb>().Use(() => framework);
si simple mais si élégant et quelque chose que vous devez juste savoir!