Класс UnitOfWorkFactory не инициализирован должным образом - PullRequest
1 голос
/ 18 марта 2012

Для изучения я создал новое приложение 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 содержит только UnitOfWorkFactory, который инициализируется с атрибутом Inject. Похоже, что инъекция произошла не так, как ожидалось.

И ниже - UnitOfWorkFactory:

public class UnitOfWorkFactory : IUnitOfWorkFactory
{
    public IUnitOfWork Create()
    {
        var unitOfWork = new UnitOfWork();
        unitOfWork.SetupObjectContext();
        return unitOfWork;
    }
}

Итак, я поместил точку останова в класс Create выше, и эта точка останова никогда не достигается. Это моя проблема: UnitOfWork никогда не инициализируется. Я потратил несколько часов, пытаясь выяснить, в чем проблема, но безуспешно.

enter image description here

Как я уже сказал в начале, этот код является копией / pase другого решения, которое работает довольно хорошо. Поэтому я проверил свой код и не нашел различий.

Спасибо.


UPDATE

Вот инициализация контейнера 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();
    }
}    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...