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类依赖项。配置类属性(此处未显示)在容器配置中注册。配置类应由容器解析。我主要关心的是在服务类构造函数中解析配置属性——不知道这是否是一个好的实践?