ServiceStack Funq Container, устанавливающий общедоступные элементы в null

Некоторые члены нашего devteam просто потратили некоторое время на устранение подобной проблемы.

Класс RegisterAs, используемый в одном из наших юнит-тестов, имеет публичного члена: public List Mails { get; задавать; }

Когда этот класс разрешается с помощью Funq, элемент устанавливается в null, даже если он был установлен в конструкторе.

Наши члены команды согласны, что странно, что этот член имеет значение null от Funq, когда член не принадлежит к типу, зарегистрированному как Container.RegisterAs<>.

В настоящее время мы используем ServiceStack версии 4.0.33

Было бы неплохо иметь возможность настроить ServiceStack.Funq так, чтобы он не затрагивал общедоступных членов, если они не реализуют интерфейс, зарегистрированный в Funq.

1 ответ

Решение

AutoWiring в IOC ServiceStack использует предварительно скомпилированное выражение для заполнения всех общедоступных свойств экземпляра. Во время создания статической фабрики она еще не знает всех существующих зарегистрированных зависимостей, поэтому созданная фабрика автоматически связывает каждое общедоступное доступное для записи свойство.

Если вам нужно другое поведение, вы можете использовать свою собственную фабрику, например:

container.Register<IDependency>(c => new Dependency(c.Resolve<IFoo>()) {
        Bar = c.Resolve<IBar>()
    })
Другие вопросы по тегам