Внедрение зависимостей 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 документация.

Другие вопросы по тегам