Мы используем весну для нашего контейнера IOC в проекте MVC3. Я пытаюсь создать базовый контроллер, который будет иметь зависимость конструктора от нашего интерфейса IUserIdentity. Я хотел бы определить зависимость конструктора один раз в файле контекста приложения для абстрактного класса и надеялся, что весна сможет ввести это для каждого производного класса.Может Spring.Net вводить абстрактный конструктор классов arg для всех производных классов
public abstract class ControllerBase : Controller
{
private readonly IUserIdentity _userContext;
public ControllerBase(IUserIdentity userContext)
{
_userContext = userContext;
}
}
public class ChildController : ControllerBase
{
private readonly IChildDependency _childService;
public ChildController(IUserIdentity userContext, IChildDependency childService)
: base(userContext)
{
_childService= childService;
}
}
Я надеялся, что есть способ определить нечто вроде следующего - (не знаю, как это будет работать) без повторного определения UserIdentity для каждого производного класса.
<object id="ControllerBase" abstract="true" singleton="false" >
<constructor-arg index="0">
<ref object="DefaultUserIdentity"/>
</constructor-arg>
</object>
<object id="ChildController" singleton="false" >
<constructor-arg index="1" >
<ref object="ConcreteChildDependency" />
</constructor-arg>
</object>
Как и следовало ожидать, когда я делаю что-то вроде этого, весна не знает, что надеть в первый аргумент в производной (ChildController) класса.
Thank! Это сработало отлично. Кроме того, мне нравится отбрасывать индексный tidbit. –
Приятно слышать; при использовании инсталляции конструктора, как вы здесь делаете, также может быть полезно проверить [autowiring] (http://www.springframework.net/doc-latest/reference/html/objects.html#objects-factory-autowire). В случае инъекции конструктора я обнаружил, что автоустановка работает достаточно хорошо. – Marijn
Autowire отлично работает. Думаю, у меня было это в голове, что autwire был широко распространенным приложением (некоторые из наших интерфейсов имеют несколько типов, поэтому должны быть указаны аргументы конструктора). –