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# 使用IoC容器解析服务类的ServiceConfig的正确设计_C#_Oop_Ioc Container_Autofac - Fatal编程技术网

C# 使用IoC容器解析服务类的ServiceConfig的正确设计

C# 使用IoC容器解析服务类的ServiceConfig的正确设计,c#,oop,ioc-container,autofac,C#,Oop,Ioc Container,Autofac,我想知道我的设计是否合适 我有一门课: public class Service { private ServiceConfig Config { get; set; } //inner class to store configuration public class ServiceConfig { //a lot of configuration properties } //ctor - self resolve Config dependency -

我想知道我的设计是否合适

我有一门课:

public class Service
{
  private ServiceConfig Config { get; set; }

  //inner class to store configuration
  public class ServiceConfig
  {
    //a lot of configuration properties
  }

  //ctor - self resolve Config dependency - wondering whether this is very bad ?
  public Service()
  {
    //get configuration class from IoC container - accessible as Singleton
    Config = ContainerResolver.Instance().Resolve<Service.ServiceConfig>();
  }

  //other code that provides functionality making use of Config property
  //...
}
公共类服务
{
私有服务配置{get;set;}
//用于存储配置的内部类
公共类ServiceConfig
{
//许多配置属性
}
//ctor-自我解析配置依赖-想知道这是否很糟糕?
公共服务()
{
//从IoC容器获取配置类-可作为单例访问
Config=ContainerResolver.Instance().Resolve();
}
//使用Config属性提供功能的其他代码
//...
}
正如您所看到的,有一个内部ServiceConfig类,我将在其中保存配置属性。我在IoC autofac容器的XML配置中注册了所有这些文件。如果可能的话,我想让一些OOD大师说几句话

关于,,
卢克

一开始,是的,这是一个糟糕的设计。只有在实例是“根”或类型无法通过容器轻松解析的情况下,才应该直接与容器交互。根实例通常是您的启动代码或引导程序

在这种情况下,由于您的容器显然已经知道如何解析
ServiceConfig
,为什么不这样做:

public class Service
{
    private ServiceConfig Config { get; set; }

    public class ServiceConfig
    {
    }

    public Service(ServiceConfig serviceConfig)
    {
        Config = serviceConfig;
    }

    ...
}

是的,我需要知道我所做的是否是一个好的实践。这里的总体想法是提供配置类作为Serivce类依赖项。配置类属性(此处未显示)在容器配置中注册。配置类应由容器解析。我主要关心的是在服务类构造函数中解析配置属性——不知道这是否是一个好的实践?