gpt4 book ai didi

c# - 如何将依赖项注入(inject)扩展方法?

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:57 27 4
gpt4 key购买 nike

我目前正在使用 C# 处理 ASP.NET MVC 4 项目。

我想创建一个扩展方法,它接受各种类型的方法,将这些方法包装在 try/catch 中,然后在调用成功时返回方法调用的结果。

这是我目前所拥有的:

  public static object HandleServerError(this object obj)
{
object result = null;
try
{
result = obj;
}
catch (Exception ex)
{
ErrorHandlers.ThrowServerErrorException(ex);
}

return result;
}

下面是一个正在使用的扩展方法的例子:

var test = webClient.DownloadString(uri).HandleServerError().ToString();

这工作正常,但是 webClient.DownloadString(uri) 部分被执行,然后作为字符串传递给 HandleServerError,这不是我想要的。

我想做的是将 webClient.DownloadString(uri) 注入(inject)到扩展方法中,以便将实际的方法调用包装到 try/catch 中。

请注意

我知道有人反对 try/catch 语句,但不想就这个主题展开辩论——这个问题的核心是依赖注入(inject)问题。不过还是感谢大家的回答!

最佳答案

我唯一能想到的是:

public static T HandleServerError<T>(this Func<T> action) 
{
T result = default(T);
try
{
result = (T)action();
}
catch (Exception ex)
{
ErrorHandlers.ThrowServerErrorException(ex);
}

return result;
}

然后你可以这样调用它:

var test = new () => { return WebClient.DownloadString(uri); }.HandleServerError().ToString();

唯一的问题是您最终可能会遇到很多这样的问题,这样您就可以处理所有不同类型的需求,但这可能不是什么大问题。

关于c# - 如何将依赖项注入(inject)扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12627928/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com