C# Dispose由authorize属性使用的WCF服务

C# Dispose由authorize属性使用的WCF服务,c#,wcf,asp.net-web-api,C#,Wcf,Asp.net Web Api,我有一个自定义授权属性,如下所示: public class AuthorizeApplicationAttribute : AuthorizeAttribute { private MainServiceSoapClient client; public AuthorizeApplicationAttribute() { this.client = new MainServiceSoapClient(); } public Authoriz

我有一个自定义授权属性,如下所示:

public class AuthorizeApplicationAttribute : AuthorizeAttribute {

    private MainServiceSoapClient client;

    public AuthorizeApplicationAttribute() {
        this.client = new MainServiceSoapClient();
    }

    public AuthorizeApplicationAttribute(MainServiceSoapClient client) {
        this.client = client;
    }

    protected override bool IsAuthorized(HttpActionContext actionContext) {
        if (!base.IsAuthorized(actionContext)) return false;
        var currentUser = System.Web.Security.Membership.GetUser();
        if (currentUser == null) return false;
        var userId = (int)currentUser.ProviderUserKey;
        return client.HasPermission(userId);
    }

}
我在
WebApiConfig
中注册为:

public class WebApiConfig {
    public static void Register(HttpConfiguration config) {

        // Web API configuration and services
        config.Filters.Add(new AuthorizeApplicationAttribute());
        // more configuration ...

    }

}
但是,
AuthorizeAttribute
没有dispose,我可以使用soap客户端实例调用构造函数,但是我不确定在哪里处置它

仅供参考:我没有使用IoC容器。尝试学习如何手动制作


这个例子使用了一个
SoapClient
,但我对
DbContext
有同样的问题,因为我可以不处理
DbContext
而活下去,我不认为不处理WCF客户机会有那么好。

在您的IsAuthorized方法中使用using语句在需要时进行初始化和处理,而不是初始化在构造函数中

如果需要依赖项注入,那么可以使用属性注入


这个问题有两个答案,分别是Ninject和StructureMap。这个问题的解决方案可能会给你想要的:


使用不是处理wcf客户端的有效方法,因为它可能会以故障状态结束。在这种情况下如何使用属性注入?你能举个例子吗?