2016-03-07 92 views
4

解決界面我想有一個像下面如何使用工廠使用Autofac

public SomeService(IMongoDatabase mongoDatabase) { 
    DB = mongoDatabase; 
} 

一個服務,我想用一個工廠來解決IMongoDatabase,只是封裝IConfiguration使用

public static IMongoDatabase GetMongoDatabase(IConfiguration config) 
{ 
    var connectionString = config.Get("SomeConnectionString"); 
    // MongoClient handles connection pooling internally 
    var client = new MongoClient(connectionString); 
    var db = client.GetDatabase(config.Get("SomeDbName")); 

    return db; 
} 

我不知道如何處理註冊,以便MongoDbFactory.GetMongoDatabase被調用,只要任何類需要IMongoDatabaseIConfiguration將被註冊。

我真的很想在我的服務中使用IMongoDatabase而不是Func<IConfiguration, IMongoDatabase>。後者似乎太鈍了,需要消費者執行我應該能夠爲他們實施的步驟。

回答

4

你可以這樣註冊的靜態GetMongoDatabase工廠方法:採用靜態方法可能會產生一些問題

builder.Register(c => MongoDbFactory.GetMongoDatabase(c.Resolve<IConfiguration>)()) 
     .As<IMongoDatabase>(); 

順便說一句,它可能是更好註冊MongoDbFactory類,並在您的使用工廠註冊。

builder.RegisterType<MongoDbFactory>() 
     .AsSelf(); 

builder.Register(c => c.Resolve<MongoDbFactory>().GetMongoDatabase()) 
     .As<IMongoDatabase>(); 

當然,你需要適應MongoDbFactory實施,使其工作 - 通過添加配置屬性,並添加IConfiguration的構造。

+0

這正是我一直在尋找。謝謝。 –