gpt4 book ai didi

c# - 我如何在使用 IOC 时处理静态类

转载 作者:太空狗 更新时间:2023-10-30 00:46:30 28 4
gpt4 key购买 nike

我刚刚开始迁移我的 Web 应用程序以完全使用 Windsor IOC。这是我遇到的一个小问题;

我有几个静态类,用于存储一些应用程序级别的全局值

EG(类的简化版):

public static class SiteInfo
{
public static Language Language = (Language)byte.Parse(SiteInfo.Val("language"));
public static string Code = Site.Code;
public static string Name = Site.Name;

public static SiteCachedData CachedData { get; set; }
public static Site Site { get; set; }

public static void Init()
{
//Get site info from DB here
//I need to inject _SiteRepository here but I can't
//since I don't have access to the constructor
}
}

我是 IOC 的新手,我知道建议避免使用静态类。处理这种情况的良好做法是什么?我正在考虑将其转换为单例,但我不确定这是否是我最好的选择。

最佳答案

这就是我喜欢避免使用静态类的原因之一——它们很难注入(inject)或反转控制。他们通常必须了解几个低级别类(class)的详细信息。由于它们是静态类,您可以保留它们,因为它们已经可供所有其他类使用并且不需要注入(inject)。

我做过的一个技巧是创建第二个类,委托(delegate)给静态类。然后,您可以将接口(interface)放在新类上,并更轻松地进入 IoC 框架。

public static class StaticClass   
{
public static object Method()
}

public class NonstaticClass : INewInterface
{
public object Method()
{
return StaticClass.Method();
}
}

这种重构的好处在于,您可以逐个方法进行,然后在进行过程中确定新的对象和接口(interface)。最终您可能能够摆脱原来的静态类。您还可以将新类注册为单例实例,以便一次只存在一个实例。

关于c# - 我如何在使用 IOC 时处理静态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3127448/

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