为了我的学习,我基于现有(和工作)解决方案从头开始创建了一个新的MVC应用程序。问题是我的 UnitOfWorkFactory 类没有初始化,我不知道为什么?
这是我的班级:
public class OrderSampleUserService : ServiceBase, IOrderSampleUserService
{
public IEnumerable<Order> GetOrders()
{
using (var unitOfWork = UnitOfWorkFactory.Create())
{
var orderRepository = unitOfWork.Create<Order>();
return orderRepository.GetAll().ToList();
}
}
}
如您所见,这是一个非常简单的课程。此类继承ServiceBase,如下所述:
public class ServiceBase
{
[Inject]
public IUnitOfWorkFactory UnitOfWorkFactory { get; set; }
}
此ServiceBase类仅包含使用Inject属性初始化的UnitOfWorkFactory。似乎注射没有按预期发生。
以下是UnitOfWorkFactory:
public class UnitOfWorkFactory : IUnitOfWorkFactory
{
public IUnitOfWork Create()
{
var unitOfWork = new UnitOfWork();
unitOfWork.SetupObjectContext();
return unitOfWork;
}
}
所以我在上面的Create类中放置了一个断点,并且永远不会到达这个断点。这是我的问题:UnitOfWork永远不会被初始化。我花了几个小时试图找出问题的原因而没有成功。
正如我在开头所说的那样,这段代码是另一个工作得很好的解决方案的副本/ pase。所以我检查了我的代码并没有发现差异。
感谢。
更新
这是IocContainer的初始化:
public class UnitOfWork : IUnitOfWork
{
private ObjectContext _ObjectContext;
private IocContainer _Container;
public UnitOfWork()
{
_Container = new IocContainer();
}
public void SetupObjectContext()
{
_ObjectContext = new ObjectContext();
_Container.BindToInstance<ObjectContext>(_ObjectContext);
}
public Repository<TRepository> Create<TRepository>() where TRepository : class
{
// As long as we registered created object context instance in child container
// it will be available now to repositories during resolve
return new Repository<TRepository>(_ObjectContext);
}
public void Commit()
{
_ObjectContext.SaveChanges();
}
public void Dispose()
{
_ObjectContext.Dispose();
}
}