Domanda

Sto impazzendo, quindi ho preso questo

public class FrameworkDbTestBase : IDisposable
{
    protected readonly FrameworkDb Db;
    public FrameworkDbTestBase()
    {
        var connection = Effort.DbConnectionFactory.CreateTransient();
        Db = new FrameworkDb(connection);
    }

    public void Dispose()
    {
        Db.Dispose();
    }
}

Questo sta prendendo in giro l'ef6 con sforzo..lo adoro, così posso eseguire continuamente test in background mentre tutte le modifiche vengono apportate alla mia base di codice...è fantastico ma sfortunatamente ne ho bisogno

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

per ottenere la derisione di ef6 con impegno, tuttavia Structuremap insiste nel crearmi un'istanza FrameworkDb con il costruttore lungo quello con il parametro di iniezione DbConnection, quindi ottengo questo:

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

Sospiro!Alzo gli occhi al cielo...Voglio che StructureMap mi usi l'altro costruttore più breve, quindi dopo aver scavato un po' secondo questo post: Mappa della struttura: non voglio usare il costruttore più avido! Dovrei cambiare questo:

For<FrameworkDb>().Use <FrameworkDb>();

a questa

For<FrameworkDb>().Use(() => new FrameworkDb());

Nessuna fortuna, sempre lo stesso errore...e non voglio rimuovere il costruttore della connessione altrimenti il ​​mio test di integrazione non funzionerà più...Quindi forse usa la connessione solo per costruire la mappatura e non usarla effettivamente nell'iniezione stessa ...non molta fortuna ...aggiungendo questo:

For<DbConnection>().Use(() => new EntityConnection("DefaultConnection"));

mi dà questo:

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

Beh, questo per quanto riguarda quella teoria...ehm...soluzione qualcuno?Ciaooo qualcuno?Sospiro...

È stato utile?

Soluzione

Andiamo gente, nessuno?La risposta è così semplice...BENE

var framework = new Framework();
For<FrameworkDb>().Use(() => framework);

Così semplice eppure così elegante e qualcosa che devi solo sapere!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top