Подход, который я выбрал, заключается не в том, чтобы внедрить DataContext, а в фабрику DataContext, класс с методом, который возвращает DataContext соответствующего типа. У меня есть два конструктора для, в моем случае, класса контроллера конструктор по умолчанию и один, который принимает фабрику (и другие внедренные объекты). Конструктор по умолчанию просто вызывает конструктор с параметрами со всеми параметрами null. Параметризованный конструктор создает объекты типов по умолчанию, если соответствующий параметр имеет значение null.
Использование фабрики позволяет моим действиям контроллера создавать новый DataContext при вызове вместо того, чтобы иметь один DataContext, который существует на протяжении всего жизненного цикла приложения. Фабрику можно построить так, чтобы она возвращала существующий контекст, если он был доступен, и создавала новый по мере необходимости, но я предпочитаю охватывать их единицей работы.
P.S. Фабрика фактически создает класс-оболочку вокруг DataContext, а не фактического DataContext, в качестве интерфейса (IDataContextWrapper). Это значительно облегчает имитацию реальной базы данных из моих тестов контроллера. Все вышеперечисленное предполагает использование LINQ / ASP.NET MVC, но принципы, как правило, применимы, я думаю.