Обычно, я бы просто предположил, что кто-то с 20k + rep здесь, вероятно, знает больше, чем я об этом. Однако мне также кажется, что:
1) Ваш пример не слишком далек от примеров, используемых на веб-сайте Ninject
2) Даже если этот «конкретный» пример не очень хороший, проблема заключается в использовании инициализаторов объектов, которые могут применяться к любому другому числу более законных сценариев.
К сожалению, у меня нет ответа о том, как выполнить инициализацию объекта с помощью Ninject, но у меня есть предложение о том, «где» использовать Ninject, которое может помочь (и я понимаю, что этому посту год, но, возможно, так и будет помогите кому-нибудь).
Я согласен, что вам, скорее всего, следует использовать конкретные классы в методе GetPeople (), поскольку этот метод, вероятно, является частью реализации, специфичной для Person (и, вероятно, в той же сборке и / или пространстве имен). Однако, когда у вас есть что-то вроде формы, которая представляет пользователю информацию о Person, я должен подумать, что она должна работать с IPerson, а не с конкретной реализацией.
Место, где вам в основном нужно использовать инициализаторы объектов для того, чтобы воспользоваться преимуществами linq, хотя и в таких методах, как GetPeople, где вы должны работать с конкретными классами, хотя, так что я считаю, что вы должны иметь возможность получить лучшее из обоих миров , Нет, вы не сможете использовать инициализатор объекта в форме при работе с IPerson, но я не думаю, что вам когда-нибудь «понадобится» то, что вам нужно, если вы хотите использовать linq в Метод GetPeople.
Редактировать: На самом деле вам не нужны инициализаторы объектов, чтобы использовать linq здесь
Если вы откажетесь от синтаксического сахара, вы можете переписать
IEnumerable<IPerson> people = (
from person in persons.Descendants("person")
select new Person
{
FirstName = person.Attribute("FName").Value,
LastName = person.Attribute("LName").Value
}).ToList();
Как
IEnumerable<IPerson> people =
(persons.Descendants("person")
.Select(o =>
{
var p = new Person();
p.FirstName = person.Attribute("FName").Value;
p.LastName = person.Attribute("LName").Value;
return p;
}).ToList();
И вы можете видеть, как это можно легко изменить, чтобы работать с инъекцией.