控制器中的IoC容器实现

时间:2015-07-16 15:32:13

标签: c# asp.net-mvc inversion-of-control structuremap

我想在方法中使用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 个答案:

答案 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;

我必须去见面,有点匆忙,希望有所帮助