2013-01-23 40 views
4

我有以下的倉儲類:ServiceStack - 依賴似乎不被注入?

public class Repository<T> : IDisposable where T : new() 
{ 
    public IDbConnectionFactory DbFactory { get; set; } //Injected by IOC 
    IDbConnection db; 
    IDbConnection Db 
    { 
     get 
     { 
      return db ?? (db = DbFactory.Open()); 
     } 
    } 

    public Repository() 
    { 
     Db.DropAndCreateTable<T>(); 
    } 

    public List<T> GetByIds(long[] ids) 
    { 
     return Db.Ids<T>(ids).ToList(); 
    } 
} 
AppHost.Configure()

然後。我註冊的依賴,像這樣:

container.Register<IDbConnectionFactory>(c => 
      new OrmLiteConnectionFactory(ConfigurationManager. 
     ConnectionStrings["AppDb"].ConnectionString, SqlServerDialect.Provider)); 

container.RegisterAutoWired<Repository<Todo>>().ReusedWithin(Funq.ReuseScope.None); 

但是當我運行我的應用程序似乎是我的DbFactory爲空並沒有正確注射,因爲我得到一個空引用異常。

回答

6

當試圖訪問構造函數中的任何依賴項時它將爲空,因爲在IOC有機會注入任何依賴項之前啓動該類。

我將任何初始化/設置邏輯搬出到AppHost.Configure(),e.g:

using (var db = container.Resolve<IDbConnectionFactory>().Open()) 
{ 
    db.DropAndCreateTable<MyType>(); 
}