自定义Web代理类的参数化构造函数

时间:2014-02-18 19:16:55

标签: c# asp.net asp.net-web-api

这个问题与一个较老的问题有关:

Is it possible to specify proxy credentials in your web.config?

我创建了一个自定义Web代理类,并在上面问题的答案中显示的部分中使用它。我在自定义Web代理类中有一个构造函数,它接受代理URL,用户名,密码和域值。但是,我无法弄清楚如何让.NET调用此参数化构造函数,因为我没有显式创建Web代理对象。我在web.config文件中添加了以下配置设置

<system.net>
   <defaultProxy enabled="true" useDefaultCredentials="false">
       <module type="ISO.Prometrix.CommunityMitigation.Common.Impl.ProxyModule, 
          ISO.Prometrix.CommunityMitigation.Common"/>
   </defaultProxy>
</system.net>

我正在使用spring.net进行DI。我在我的spring配置文件中添加了自定义类的对象定义,但是当我运行项目时,似乎总是调用默认构造函数。为了使这项工作,我正在从我的自定义Web代理中的配置应用程序设置中读取代理URI,用户名,密码和域。

我想从外部将这些值注入我的自定义类。这是我的代码:

public class ProxyModule : IWebProxy
{
    private readonly string _username;
    private readonly string _password;
    private readonly string _domain;
    private readonly string _proxyAddress;

    public ProxyModule()
    {
        // Unable to figure out how to invoke the parameterized constructor on this 
        // class that's why doing this workaround.
        _username = ConfigurationManager.AppSettings["ProxyUsername"];
        _password = ConfigurationManager.AppSettings["ProxyPassword"];
        _domain = ConfigurationManager.AppSettings["ProxyDomain"];
        _proxyAddress = ConfigurationManager.AppSettings["ProxyAddress"];
    }

    public ProxyModule(
        string username,
        string password,
        string domain,
        string proxyAddress)
    {
        _username = username;
        _password = password;
        _domain = domain;
        _proxyAddress = proxyAddress;
    }

    public ICredentials Credentials
    {
        get
        {
            return new NetworkCredential(_username, _password, _domain);
        }

        set {}
    }

    public Uri GetProxy(Uri destination)
    {
        return new Uri(_proxyAddress);
    }

    public bool IsBypassed(Uri host)
    {
        return false;
    }
}

1 个答案:

答案 0 :(得分:0)

.NET不允许您控制将使用哪个实例。 web.config中设置的参数是类型,因此您无法控制它将如何实例化。

我建议你创建一个配置对象并通过Spring实例化它。然后从ProxyModule构造函数内部检索直接调用Spring的对象并相应地配置代理。