我想在方法中使用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);
答案 0 :(得分:1)
如果您正在使用StructureMap,它使用&#34; Greedy Initialization&#34;,这意味着当调用构造函数时,它将调用构造函数,其中传入了大量参数或参数。
private IFDGService service;
public MyController(IFDGService service)
{
this.service = service;
}
在service
被调用后,IoC.Configure()
将可用。
在应用程序启动时调用IoC.Configure()
。谷歌&#34; Mvc从哪里开始&#34;或类似的东西。
更改公司代码将其设置为控制器中的实例变量以外的其他位置,如static
类,我知道静态是坏的,让它工作然后使其更好,因为这对于修改,然后在需要时get; set;
。
我必须去见面,有点匆忙,希望有所帮助