Конструкторы по умолчанию на карте структуры - PullRequest
2 голосов
/ 14 октября 2010

У меня есть этот код на веб-сайте ASP.NET MVC:

x.For<AccountController>().TheDefault.Is.ConstructedBy(() => new AccountController());

Этот код выдает предупреждение, которое кажется самоочевидным, но по какой-то причине, когда я использую метод «Использовать», он, похоже, не работает. Я знаю, что делаю что-то не так и буду признателен за помощь.

Предупреждение:

Предупреждение 1 'StructureMap.Configuration.DSL.Expressions.CreatePluginFamilyExpression.TheDefault' устарел: «Предпочитать методы Use ()»

Спасибо.

Ответы [ 2 ]

6 голосов
/ 14 октября 2010

Прямой эквивалент вашего существующего кода, но с новым API:

For<AccountController>().Use(() => new AccountController());

Это создаст новый экземпляр AccountController каждый раз, когда запрашивается экземпляр AccountController.

Предупреждение : если вы передадите экземпляр объекта (как предлагает RPM1984) вместо лямбды методу Use (), вы получите синглтон - один и тот же экземпляр будет возвращаться каждый раз, когда AccountController запрашивается Это очень отличается от того, что ваш код делал ранее с помощью синтаксиса Is.ConstructedBy ().

1 голос
/ 14 октября 2010

Если вы посмотрите на XMLDoc для третьей перегрузки метода «Использовать», он скажет следующее:

Сокращение, чтобы сказать TheDefault.IsThis (@object)

Поэтому просто сделайте это так:

For<AccountController>().Use(() => new AccountController());

Хотя я не уверен, в чем смысл этого (впрыскивать бетон, когда что-то запрашивает бетон), если только это не пример, ивы действительно делаете что-то еще.

Обычно для контроллеров MVC вы создаете ControllerFactory - я не видел необходимости «явно» вводить конкретный контроллер.

...