控制器中的 IoC 容器实现
IoC container implementation in controller
我想在一种方法中使用 IoC 容器来检查登录用户提交付款时的公司代码。我的设置中有两个证书 class 和一个 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 可以检查凭据,但不会 return 在付款时向 IoC 提交以检查公司代码并应用正确的证书。
当我 运行 信用卡控件包含正确的公司代码时,提交付款方法。
如何根据更新的公司代码让我的申请 select 获得正确的证书。鉴于用户可以根据支付政策 select 设置不同的公司代码。一个公司代码目前可以是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);
如果您正在使用 StructureMap,它会使用 "Greedy Initialization",这意味着当调用构造函数时,它将调用传入最多参数或参数的构造函数。
private IFDGService service;
public MyController(IFDGService service)
{
this.service = service;
}
调用IoC.Configure()
后service
可用
在应用程序启动的任何地方调用IoC.Configure()
。 google "where does Mvc start" 或类似的东西。
要更改公司代码,请将其设置在控制器中实例变量以外的某个地方,例如 static
class,我知道静态不好,让它工作然后让它变得更好,因为修改起来会很复杂,然后在需要时 get; set;
。
我要去开会,有点仓促,希望对你有帮助
我想在一种方法中使用 IoC 容器来检查登录用户提交付款时的公司代码。我的设置中有两个证书 class 和一个 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 可以检查凭据,但不会 return 在付款时向 IoC 提交以检查公司代码并应用正确的证书。
当我 运行 信用卡控件包含正确的公司代码时,提交付款方法。
如何根据更新的公司代码让我的申请 select 获得正确的证书。鉴于用户可以根据支付政策 select 设置不同的公司代码。一个公司代码目前可以是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);
如果您正在使用 StructureMap,它会使用 "Greedy Initialization",这意味着当调用构造函数时,它将调用传入最多参数或参数的构造函数。
private IFDGService service;
public MyController(IFDGService service)
{
this.service = service;
}
调用IoC.Configure()
后service
可用
在应用程序启动的任何地方调用IoC.Configure()
。 google "where does Mvc start" 或类似的东西。
要更改公司代码,请将其设置在控制器中实例变量以外的某个地方,例如 static
class,我知道静态不好,让它工作然后让它变得更好,因为修改起来会很复杂,然后在需要时 get; set;
。
我要去开会,有点仓促,希望对你有帮助