Я столкнулся с ситуацией, когда мой конструктор классов принимает 2 параметра. Один параметр должен быть передан вручную вызывающим объектом, в то время как другой параметр должен быть проиндексирован Structuremap. Я хочу выставить только один конструктор, который принимает значение параметра, которое должно передаваться вручную. Я хочу скрыть второй параметр, так как он должен обрабатываться самой Структурной картой. Может ли кто-нибудь предложить, как это можно сделать.Как использовать Структурную карту для DI, если некоторые параметры конструктора необходимо передать вручную
У меня есть сценарий, как этот
public class ProcessPayments
{
public ProcessPayments(String accountNumber, IProcessPayments paymentProcesser)
{
...
}
}
Я хочу выставить конструктор только с первым параметром, как так
var P = new ProcessPayments("123");
Я хочу Структура Карта автоматически вводить зависимость IProcessPayments для меня на основе моя конфигурация.
Как я могу это достичь?
я могу сделать что-то вроде этого в моем конструкторе
public ProcessPayments(String accountNumber)
{
_AccountNumber = accountNumber;
_ProcessPayments = ObjectFactory.GetInstance<IProcessPayments >();
}
Но это означало бы, что теперь у меня есть зависимость от самой структуры карты и мне не нравится этот вариант. Любое другое элегантное решение?
Стивен ваш ответ имеет смысл для меня, однако в моем нынешнем случае я прохождения параметр, взятый из конструктора, в конструктор базового класса. Я думаю, я могу изменить базовый класс, чтобы принимать параметр в методе, а не в конструктор. В противном случае я могу использовать завод. Ваш ответ имеет смысл. Благодаря! –
Steven У меня есть один маленький связанный вопрос, на который я хочу, чтобы вы ответили, поэтому я не отправляю его снова. Я считаю, что если объект нуждается в некоторой ценности для выполнения своих функций, он должен быть раскрыт в конструкторе. Например, если, например, существует класс, который получает данные json из некоторого URL-адреса, возможно, URL-адрес должен быть задан с помощью конструктора. Ваш ответ заставил меня думать, является ли этот подход правильным или нет? Plz дает вам ценные отзывы. –
@AfrazAli: В этом примере URL-адрес выглядит как значение конфигурации. Это не изменится в течение срока действия приложения. Вы передадите это через конструктор. – Steven