Linq to SQL и Castle IoC Проверка работоспособности контейнера, пожалуйста

Я только что начал использовать Linq to SQL и контейнер IoC Windsor Castle для нового веб-приложения, и, хотя в предварительных тестах все работает нормально, я мог бы действительно проверить его работоспособность.

У меня были проблемы, когда я пытался извлечь объекты из базы данных с помощью Linq в разных частях приложения, а затем обновлять их в базе данных. Поскольку они были из разных контекстов данных, я не смог сохранить изменения.

Поэтому я создал единый текстовый текст, используемый в приложении, - надеюсь, для каждого веб-запроса. - Это разумный способ решить проблему?

Это выглядит так:

public class DataContextAccessor : IDataContextAccessor
{
    private readonly DataContext dataContext;
    public DataContextAccessor(string connString)
    {
        dataContext = new DataContext(connString);
    }
    public DataContext DataContext { get { return dataContext; } }
}

Я использовал Касл, чтобы спровоцировать это так:

  <component id="DataContextAccessor" service="DomainModel.Repositories.IDataContextAccessor, DomainModel"
                      type="DomainModel.Repositories.DataContextAccessor, DomainModel" lifestyle="PerWebRequest">
  </component>

Затем, когда я хочу попасть в базу данных в классе, я просто объявляю IDataContext datacontextв своем конструкторе.

  • Создаст ли это (как я надеюсь) единый контекст данных для каждого веб-запроса - и не вызовет ли я проблем с гонкой, когда одновременно поступает много запросов?
2.10.2009 14:43:24
1 ОТВЕТ
РЕШЕНИЕ

Проблема, которую я вижу, у вас возникнет, если ваш интерфейс IDataContextAccessor предоставляет свойство DataContext следующим образом:

public interface IDataContextAccessor{
  DataContext DataContext{get;}
}

Проблема в том, что вы фактически тесно связали свой интерфейс с DataContext, созданным с помощью linq, что означает, что макетирование и модульное тестирование практически невозможно.

1
2.10.2009 14:54:41