Извините, если это действительно основной вопрос, но это действительно было для меня. Мне очень нравится идея DI, это действительно помогает мне с моим тестированием, но я ударил немного кирпичной стены, я думаю. Поэтому у меня есть два типа:DI объект построения графа - разделительная логика и график построения
Table
TableManager
Теперь табличный объект имеет конструктор по нему так:
Table(ITableCommandRunner tableRunner,
IQueryProvider queryProvider,
IDataReader reader,
string Name)
Теперь объект таблицы в значительной степени использует только те объекты, так следуя правилу, что вы просите что вам нужно, я передаю их. Теперь мой объект TableManager используется для открытия и закрытия таблиц. Единственное, что ему нужно, это ITableCommandRunner, поэтому я передаю это в конструкторе.
TableManager(ITableCommandRunner tablrunner)
Хорошо, что это нормально, но в TableManager.OpenTable команде мне нужно вызвать открытую таблицу на вводе команды ITableCommandRunner, а затем построить новый объект таблицы передать обратно.
public ITable OpenTable(string tableName)
{
// Call open table command on tablerunner.
// I need a IQueryProvider and IDataReader to pass to the table.
return new Table<TEntity>(this.tablerunner, provider,reader, tableName);
}
но теперь в моей открытой командой таблицы я должен сделать IDataReader и IQueryProvider. Если я передаю их в конструктор TableManager, это не нарушает «принятие объектов, чтобы передать их во внутренний тип и не использовать их».
Я не уверен, как это сделать. Может ли кто-нибудь помочь мне с этим?
Я просто не уверен, как я разделяю конструкцию объекта и логику.
Я думаю, что мне просто нужно взять IQueryProvider и IDataReader в диспетчере. Диспетчер таблиц - это всего лишь фабрика с другим именем. Я смотрел техническую беседу google на DI с Miško Hevery и согласен с тем, что он говорит, но я никогда не смогу найти реальные примеры ситуации, в которой я нахожусь. Хорошо и хорошо сказать: «Не принимайте объекты, чтобы просто пройти их нет ", но без примера это ничего не значит. И я работаю и SDK, поэтому каждая часть должна быть автономной. –
Извините, что я немного рассердился. Спасибо, по крайней мере, я знаю, что я не единственный с этой проблемой. –