Внедрение зависимостей ObjectBuilder и веб-службы ASP.NET
Я использую Microsoft.Practices.ObjectBuilder
в веб-проекте для обработки внедрения зависимостей (например, между представителем и презентатором).
Недавно я добавил ASP.NET Web Service (.asmx) для обработки вызовов ajax. Я хотел бы использовать внедрение зависимости с ObjectBuilder
здесь, но я не могу заставить его работать.
Я попытался просто добавить что-то вроде этого:
[CreateNew]
public MyClass MyClass
{
set
{
_myClass = value;
}
}
Но это не работает. Собственник MyClass
никогда не называется. Можно ли даже заставить это работать?
1 ответ
Что касается старой унаследованной системы, особенно для тех, кто использует статические классы без сохранения состояния, я нашел этот дизайн наиболее подходящим:
public MyClass MyClass
{
get
{
if(_myClass == null){ _myClass = new DefaultMyClass(); }
return _myClass;
}
set
{
_myClass = value;
}
}
С этим я все еще могу делать инъекцию зависимостей в модульном тесте, используя инъекцию сеттера.
IMyClassUser m = new MyClassUser();
m.MyClass = new MockMyClass();
Хотя, на самом деле, не слишком сильно меняет существующий код. А позже, когда придет время, его можно изменить с помощью конструктора DI.
Это также поможет вашему старому коллеге, который не слишком понимает DI, быстрее отслеживать код (используя Go to Definition
). И он может выжить даже без interface
/class
документация.