Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#动态创建实例的最少代码_C#_Properties_Initialization_On The Fly - Fatal编程技术网

c#动态创建实例的最少代码

c#动态创建实例的最少代码,c#,properties,initialization,on-the-fly,C#,Properties,Initialization,On The Fly,假设我们要创建一组服务,这些服务可能由以下人员使用,也可能不由以下人员使用: class ServiceCollection { public MyService MyService = new MyService(arg1,arg2,...); public MySecondService MySecondService = new MySecondService(arg1,arg2,...); ... 由于我们不知道是否将使用服务实例,我们希望动态创建一个

假设我们要创建一组服务,这些服务可能由以下人员使用,也可能不由以下人员使用:

  class ServiceCollection {
     public MyService MyService = new MyService(arg1,arg2,...);
     public MySecondService MySecondService = new MySecondService(arg1,arg2,...);
     ...
由于我们不知道是否将使用服务实例,我们希望动态创建一个服务实例:

  class ServiceCollection {
     private MyService _MyService = null;
     public MyService MyService { 
        get {
           if (_MyService==null) _MyService = new MyService(arg1,arg2,...);
           return _MyService;
       }
     }
如果用户代码两次引用一个服务,则需要使用同一个服务实例。因为上面的代码是。。。有点长。。。我想知道以下结果是否正确:

  class ServiceCollection {
     private MyService _MyService = null;
     public MyService MyService => _MyService = _MyService ?? new MyService(arg1, ...);

或者,对于这个简单的问题,还有其他(更优雅、更简短的)解决方案吗?

我正在尝试理解该体系结构。通常,您可以通过依赖项注入动态加载不同的服务。所以我看不出有什么理由去经历你正在尝试的困难

或者,你是在尝试平衡你这边的负载吗?若然,原因为何

这里有两个潜在的想法

  • 我不想加载服务,直到它被使用
  • 我想平衡多个服务之间的负载
  • 在体系结构上,第一个非常适合通过注入加载依赖项。如果您让API团队为您提供比例,则后者更好


    我错过什么了吗?

    你在找单身汉。根据你的需要,它可以有更多的功能。我在一个中等规模的c#代码库中遇到过这种代码,所以我认为没关系。它不是一种单例代码,或者我遗漏了一些东西。MyService可以有多个实例,但是在这个集合中可以有零个,也可以只有一个。我们只是不想在创建服务时再创建一个服务——假设创建服务是一项繁重的操作。问题不在于“如何只创建一个实例”,而在于如何编写一个简短而优雅的代码来检索和重用仅按需创建的实例。一种方法是,当您想要将服务“替换”为伪造的服务或其他服务时,配置并使用依赖注入系统。使用服务集合的另一种方法是,您可以使用一些伪造的和一些真实的服务集合构建一个“环境”,并将此集合提供给用户代码以使用它们。优点和缺点。当服务构造函数得到另一个参数时,必须修改周围的所有代码以及DI系统。在这种方法中,服务的创建集中在这个集合中。随需应变。这是一个优势——或者我认为是。