调用构造函数

豆镇

成员
已加入
2019年2月15日
留言内容
15
编程经验
5-10
如果我有一个类,该类的构造函数加载了我想在服务运行时访问的静态类,那么该如何在我拥有的方法中调用它呢?从本质上讲,我有一个类,其中包含用于加载客户对象的方法,我每天只需要设置一次即可,然后从该点开始对其进行访问。我只需要能够以一种每天早上在我的服务中调用的方法来初始化Customer类。谢谢也许这不是最好的方法,但只想设置一次,然后在需要时访问它。谢谢

Code Example:
namespace Framework
{
    public class Customer
    {   
        private readonly ICustomerRepository _customerRepository;

        public CustomerSetup(ICustomerRepository customerRepository)
        {
            Customer.CustomerSetup(GetCustomerGroup(),GetCustomerLocation(),GetCustomerActive());
        }

        private string GetCustomerGroup()
        {
        ....
        }

        private string GetCustomerLocation()
        {
        ....
        }

        private string GetCustomerActive()
        {
        ....
        }
    }
}

Then I have my static class different project:

namespace Common.Domain
{
    public static class Customer
    {
        public static string CustomerGroup { get; private set; }

        public static string CustomerLocation { get; private set; }

        public static bool CustomerActive { get; private set; }

        public static void CustomerSetup(string customerGroup, string customerLocation, bool customerActive)
        {
            CustomerGroup = customerGroup;
            CustomerLocation = customerLocation;
            CustomerActive = customerActive;
        }
    }
}
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,542
地点
弗吉尼亚州切萨皮克
编程经验
10+
您需要花一些时间阅读有关类和构造函数的C#文档。静态类的静态构造函数仅在任何人第一次访问该类时才被调用一次。在下面的链接中有更多详细信息。


不幸的副作用是它只有一次。因此,如果您的程序运行超过24小时,那么您明天想要的就是明天早上不再调用构造函数。

我建议您查看工厂或立面图案。在该模式的方法内,检查时间。如果您需要返回一个新对象,则可以创建一个新对象并对其进行缓存。如果尚未创建新对象,则返回缓存的版本。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,535
地点
悉尼,澳大利亚
编程经验
10+
您可以使用如下形式:
C#:
public class Thing
{
    private DateTime creationDate;

    private static Thing currentInstance;

    private Thing()
    {
        creationDate = DateTime.Today;
    }

    public static Thing GetInstance()
    {
        if (currentInstance == null || currentInstance.creationDate < DateTime.Today)
        {
            currentInstance = new Thing();
        }

        return currentInstance;
    }
}
Call GetThing every time you want an instance and it will return a different instance each day but the same instance all day.
 

豆镇

成员
已加入
2019年2月15日
留言内容
15
编程经验
5-10
您可以使用如下形式:
C#:
public class Thing
{
    private DateTime creationDate;

    private static Thing currentInstance;

    private Thing()
    {
        creationDate = DateTime.Today;
    }

    public static Thing GetInstance()
    {
        if (currentInstance == null || currentInstance.creationDate < DateTime.Today)
        {
            currentInstance = new Thing();
        }

        return currentInstance;
    }
}
Call GetThing every time you want an instance and it will return a different instance each day but the same instance all day.
我可以在上面的构造函数之外简单地创建一个方法"Customer.CustomerSetup(GetCustomerGroup(),GetCustomerLocation(),GetCustomerActive());" instead of the constructor just have below it a public void LoadCustomerSetup { Customer.CustomerSetup(GetCustomerGroup(),GetCustomerLocation(),GetCustomerActive()); } and then call that on a start up method I have? In this case the static class will be loaded and I can just say Customer.CustomerGroup for example anywhere in the application. I am not instantiating the Customer object just accessing at that point.
 
最佳 底部