Давайте начнем с моей архитектуры.Я постараюсь максимально упростить свой код.Если я полностью перепутал, пожалуйста, предупредите меня.
IUnitOfWork
public interface IUnitOfWork<T> : IDisposable
{
IEntityRepository<T> Repository { get; }
void Commit();
}
UnitOfWork
public class UnitOfWork<T> : IUnitOfWork<T>
{
private IDbConnection _Connection;
private IDbTransaction _Transaction;
public IRepository<T> Repository { get; private set; }
public UnitOfWork(IDbConnection Connection, IRepository<T> Repository)
{
_Connection = Connection;
this.Repository = Repository;
_Transaction = _Connection.BeginTransaction();
}
}
RepositoryBase
public abstract class RepositoryBase<T> : IRepository<T>
{
protected IDbTransaction Transaction;
protected IDbConnection Connection { get { return Transaction.Connection; } }
public RepositoryBase(IDbTransaction transaction)
{
Transaction = transaction;
}
}
TestDAL
public class TestDAL : RepositoryBase<Test>, ITestDAL
{
public DpTestDAL(IDbTransaction transaction) : base(transaction) {}
}
TestService (BLL)
public class TestService : ITestService
{
private IUnitOfWork<Test> uow;
public TestService(IUnitOfWork<Test> unitOfWork)
{
uow = unitOfWork;
}
public List<Test> GetAll()
{
return uow.Repository.GetAll().ToList();
}
}
И мои настройки авто-фака.
builder.RegisterType<TestService>().As<ITestService>();
builder.RegisterType(typeof(OracleConnection)).As(typeof(IDbConnection)).InstancePerLifetimeScope();
builder.RegisterGeneric(typeof(RepositoryBase<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope();
builder.RegisterGeneric(typeof(UnitOfWork<>)).As(typeof(IUnitOfWork<>)).InstancePerDependency();
//builder.RegisterType(typeof(OracleTransaction)).As(typeof(IDbTransaction)).InstancePerLifetimeScope();
Я новичок в этом типе архитекторов и пытаюсь что-то сделать самостоятельно.Пожалуйста, скажите мне, если что-то не так или совершенно неправильно.
Моя проблема в том, что мне нужно передать IDbTransaction в конструктор доступа к данным.Когда я не регистрирую интерфейс IDbTransaction, исключение составляет «не удалось разрешить параметр», а при попытке зарегистрироваться в OracleTransaction исключение «OracleTransaction» не имеет открытого конструктора.Где я перепутал?