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客户端的有效方法,因为它可能会以故障状态结束。在这种情况下如何使用属性注入?你能举个例子吗?