2011-06-13 18 views
6

Estoy luchando para obtener una prueba de unidad de trabajo para una de mis clases. Quiero inyectar mi fábrica en lugar de la fábrica autogenerada a la que se resuelve el autofac. ¿Cómo registro mi propia función como delegado para reemplazar la fábrica de delegados autogenerados?¿Cómo me burlo de las fábricas de delegados autogenerados del autofac?

Mi código es algo como esto es forma de esquema:

interface IEntryImporter { ... } 

class EntryImporter : IEntryImporter { 
    public EntryImporter(ISeries series, IMatch match, Entry.Factory entryFactory) { 
     : 
    } 
    : 
} 

interface IEntry : { ... } 
class Entry : IEntry { 
    public delegate IEntry Factory(); 
    public Entry() { ... } 
} 

interface IMatch : { ... } 
class Match : IMatch { ... } 

interface ISeries : { ... } 
class Series : ISeries { ... } 

void IEntry MyEntryFactory() { 
    var entry = new Mock<IEntry>(); 
    : 
    return entry.Object; 
} 

void TestMe() { 
    ContainerBuilder builder = new ContainerBuilder(); 
    builder.RegisterType<Entry>().As<IEntry>(); 
    builder.RegisterType<Match>().As<IMatch>(); 
    builder.RegisterType<Series>().As<ISeries>(); 
    builder.RegisterType<EntryImporter>.As<IEntryImporter>(); 

    var series = new Mock<ISeries>(MockBehavior.Strict); 
    builder.RegisterInstance<ISeries>(series.Object); 

    var match = new Mock<IMatch>(MockBehavior.Strict); 
    builder.RegisterInstance<IMatch>(match.Object); 

    // How to register MyEntryFactory as Entry.Factory for autofac to resolve? 

    using(var container = builder.Build()) { 
     var importer = container.Resolve<IEntryImporter>(); 
     : 
    } 
} 

Respuesta

Cuestiones relacionadas