2011-06-13 54 views
6

我正努力爲我的一個課程進行單元測試。我想注入我的工廠,而不是autofac解決的自動生成的工廠。我如何將自己的函數註冊爲委託來替換自動生成的委託工廠?如何模擬autofac的自動生成的委託工廠?

我的代碼看起來像這樣的提綱形式:

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>(); 
     : 
    } 
} 

回答