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, ...);
或者,对于这个简单的问题,还有其他(更优雅、更简短的)解决方案吗?我正在尝试理解该体系结构。通常,您可以通过依赖项注入动态加载不同的服务。所以我看不出有什么理由去经历你正在尝试的困难 或者,你是在尝试平衡你这边的负载吗?若然,原因为何 这里有两个潜在的想法
我错过什么了吗?你在找单身汉。根据你的需要,它可以有更多的功能。我在一个中等规模的c#代码库中遇到过这种代码,所以我认为没关系。它不是一种单例代码,或者我遗漏了一些东西。MyService可以有多个实例,但是在这个集合中可以有零个,也可以只有一个。我们只是不想在创建服务时再创建一个服务——假设创建服务是一项繁重的操作。问题不在于“如何只创建一个实例”,而在于如何编写一个简短而优雅的代码来检索和重用仅按需创建的实例。一种方法是,当您想要将服务“替换”为伪造的服务或其他服务时,配置并使用依赖注入系统。使用服务集合的另一种方法是,您可以使用一些伪造的和一些真实的服务集合构建一个“环境”,并将此集合提供给用户代码以使用它们。优点和缺点。当服务构造函数得到另一个参数时,必须修改周围的所有代码以及DI系统。在这种方法中,服务的创建集中在这个集合中。随需应变。这是一个优势——或者我认为是。