4

私は次のリポジトリクラスを持っています:

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、null参照例外が発生するため、nullであり、適切に挿入されていないように見えます。

4

1 に答える 1

6

IOCが依存関係を注入する前にクラスが開始されるため、コンストラクター内の依存関係にアクセスしようとするとnullになります。

初期化/セットアップロジックを次AppHost.Configure()のように移動します。例:

using (var db = container.Resolve<IDbConnectionFactory>().Open())
{
    db.DropAndCreateTable<MyType>();
}
于 2013-01-23T19:05:51.140 に答える