我的工作单元对象有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>();
答案 0 :(得分: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
的依赖关系。
答案 1 :(得分: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 and DAL