В Ninject есть автоматическое неявное самосвязывание для конкретных типов. Поэтому без дальнейшей настройки я могу разрешить каждый тип в моем приложении, например:
Foo foo = Kernel.Get(typeof(Foo));
Теперь, если мне нужен массив Foo
, как бы я это сделал?
Foo[] foos = Kernel.Get(typeof(Foo[])); // does not work
EDIT:
Для пояснения, вот что я на самом деле пытаюсь достичь: В приложении ASP.NET MVC у меня есть AutoMapViewResult (о котором Джимми Богард говорит в этом замечательном (!) Видео: http://www.viddler.com/explore/mvcconf/videos/1/ или ASP.NET MVC 2 в действии ). Разница в том, что мне нужно добавить какой-то сервис в конструктор моей модели представления, прежде чем сопоставить объект с AutoMapper. Если тип источника является массивом, я также должен создать экземпляр массива модели представления.
Итак, вот, наконец, некоторый (упрощенный) код: -)
public class EventsEditModel
{
// some properties here
public Location[] Locations { get; set; }
public EventsEditModel(ILocationService locationService)
{
Locations = locationService.GetAll().ToArray();
}
}
public class EventsListModel
{
// some properties here
}
и вот мой AutoMapViewResult:
public class AutoMapViewResult : ViewResult
{
public AutoMapViewResult(object model, Type sourceType, Type destinationType)
{
if (model != null)
{
var viewModel = IoC.Resolve(destinationType);
ViewData.Model = Mapper.Map(model, viewModel, sourceType, destinationType);
}
}
}
Это прекрасно работает с EventsEditModel
. Мое представление индекса требует EventsListModel[]
, поэтому мне нужно создать экземпляр массива, который выдает System.ArgumentNullException
: значение не может быть нулевым. Имя параметра: источник (в строке var viewModel = IoC...
)
Примечание: IoC.Resolve(Type serviceType)
- это просто оболочка для Kernel.Get(Type serviceType)