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 ...

Était-ce utile?

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!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top