在所有类中使用实例声明私有静态成员

时间:2018-11-20 14:16:45

标签: c# static automapper

我正在设法弄清楚一些代码。我很难看它是否有任何优势。看起来有些可疑,但我对静态声明的工作方式感到困惑。

定义了所有映射的一个类:

@NotNullArgs
void methodToCall(Obj arg1, Obj arg2) { .... }

然后在global.asax.cs中调用注册。

public class AutoMapperConfig
{
    public static MapperConfiguration MyMapperconfig;

    public static void RegisterMapping()
    {
        MyMapperconfig = new MapperConfiguration(conf =>
        {

            conf.CreateMap<SomeObject, SomeOther>());
            //MANY MORE...
        }
    }

,然后在许多其他类中,映射器会像这样声明为私有静态

AutoMapperConfig.RegisterMapping();

二手

private static IMapper _Mapper = AutoMapperConfig.MyMapperconfig.CreateMapper();

我的问题是:

这是否意味着每个类都有自己的映射器私有实例,但是由于加载相同的配置,它们是完全相同的吗?

那么仅使用静态Mapper会不会更聪明?

1 个答案:

答案 0 :(得分:-1)

如果只想运行一次代码,那就更聪明了!

当创建一个类的实例时,实例化它会在内存中可用,直到被GC清除为止。但是在其他情况下,当您的项目开始到项目结束时它将可用。当您的班级长大时,这将成为噩梦,因为那样的话,您就有一个肥胖的对象会一直保留在内存中,而不仅仅是在您需要时。