1

私の作業単位オブジェクトには、接続とトランザクションの 2 つの依存関係があります。トランザクションをバインドするには、接続が必要です。この状況を処理する方法がわからない。

public class UnitOfWork : IUnitOfWork
{
    public IDbConnection Connection { get; set; }
    public IDbTransaction Transaction { get; set; }

    public UnitOfWork(IDbConnection connection, IDbTransaction transaction)
    {
        this.Connection = connection;
        // In order to create the transaction, it needs the passed in IDbConnection.
    }

    public void Commit()
    {

    }

    public void Rollback()
    {

    }
}

この状況をどのように処理しますか?

Bind<IDbTransaction>().To<SqlTransaction>();
4

2 に答える 2

2

このようにバインドできます。IDbTransaction が IDbConnection に関連付けられるようにします。

var kernel = new StandardKernel();
kernel.Bind<IDbConnection>()
      .To<SqlConnection>()
      .WithConstructorArgument("connectionString", connectionString);
kernel.Bind<IDbTransaction>()
      .ToMethod(x => x.Kernel.Get<IDbConnection>().BeginTransaction());

しかし、なぜそのようにする必要があるのか​​ 、私には理由がわかりません。Connection.BeginTransaction()内部で使用するだけで、コンストラクターからUnitOfWorkその依存関係を削除できます。IDbTransaction

于 2012-12-17T14:03:23.017 に答える
0

次のサンプルに従ってみてください。

private void RegisterDependencyResolver()
        {
            var kernel = new StandardKernel();         
            var connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            kernel.Bind(typeof(DataContext)).ToMethod(context => new DataContext(connectionString));
            kernel.Bind(typeof(IRepository<>)).To(typeof(Repository<>));            
            DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
        }

追加のリソースとして、関連する別の議論があります-Ninject、Repository、およびDAL

于 2012-12-17T03:47:03.173 に答える