Реализация контейнера IoC в контроллере
Я хочу использовать контейнер IoC в методе, чтобы проверять зарегистрированную учетную запись пользователя при отправке платежа. У меня есть два сертификата в моем классе настроек и оператор IF else, чтобы различать каждый из них.
public static string FDGCreditCardUserID
{
get
{
if (BillingController.currentcompanycode == 5)
return ConfigurationManager.AppSettings["5FDGCreditCardUserID"];
else
return ConfigurationManager.AppSettings["6FDGCreditCardUserID"];
}
}
public static string FDGCreditCardPassword
{
get
{
if (BillingController.currentcompanycode == 5)
return ConfigurationManager.AppSettings["5FDGCreditCardPassword"];
else
return ConfigurationManager.AppSettings["6FDGCreditCardPassword"];
}
}
Тогда в моем контейнере IoC
x.For<IFDGService>().Use<FDGService>().SetProperty(s =>
{
s.Url = Settings.FDGURL;
s.UserID = Settings.FDGCreditCardUserID;
s.Password = Settings.FDGCreditCardPassword;
s.Certificate = Settings.FDGCreditCardCertFilePath;
});
У меня есть служба FDGService, которая проверяет учетные данные, но не возвращает IoC при отправке платежа для проверки балансовой единицы и применения правильного сертификата.
Метод SubmitPayment, когда элемент управления кредитной карты содержит правильный балансовый код, когда я его запускаю.
Как мне получить заявку, чтобы выбрать правильный сертификат на основе обновленной балансовой единицы. Видя, как пользователи могут иметь разные балансовые единицы в зависимости от политики, выбранной для оплаты. Одна балансовая единица на данный момент может быть 5 или 6.
public ActionResult SubmitPayment([ConvertJSON]List<PayModel> payments)
{
List<TransactionModel> transactions = new List<TransactionModel>();
foreach (var pymt in payments)
{
var policyNumber = pymt.PolicyNumber.Trim();
TransactionModel trans = new TransactionModel() { Payment = pymt };
if (pymt.Selected)
{
var creditCardControl = UpdateCreditCardControl(policyNumber);
1 ответ
Если вы используете StructureMap, он использует "Жадную инициализацию", то есть при вызове конструктора он вызывает конструктор с наибольшим количеством переданных аргументов или параметров.
private IFDGService service;
public MyController(IFDGService service)
{
this.service = service;
}
затем service
будет доступно после IoC.Configure()
называется.
Вызов IoC.Configure()
везде, где запущено приложение. Google "где Mvc начинается" или что-то в этом роде.
чтобы изменить балансовую единицу, установите его где-нибудь, кроме переменной экземпляра в контроллере, как static
класс, я знаю, что статический плохо, заставить его работать, а затем сделать его лучше, так как это было бы сложно изменить, а затем get; set;
когда вам нужно.
Я должен идти на встречу, вроде торопился, надеюсь, что это помогает