【问题标题】:c# Constructing a class from its inherited classes objectc# 从继承的类对象构造一个类
【发布时间】:2020-04-30 18:06:54
【问题描述】:

我正在尝试实现一个自定义配置类,它将继承 System.Configuration.ConfigurationSection 作为其基类。

public class MyConfigurationClass: System.Configuration.ConfigurationSection
{
   MyConfigurationClass()
  {
  }
}

我一直在创建这样的类对象:

MyConfigurationClass Config = System.Configuration.ConfigurationManager.GetSection("Config") as MyConfigurationClass;

我想把它移到我的类的构造函数中,这样就不用调用了:

MyConfigurationClass Config = System.Configuration.ConfigurationManager.GetSection("Config") as MyConfigurationClass;

我可以打电话:

MyConfigurationClass Config = new MyConfigurationClass("Config");

同样的结果。

继承System.Configuration.ConfigurationSection 的元素很关键。

有什么建议吗?

编辑: 我正在尝试使用统一映射来初始化此类的默认实例,然后使用接口对此类进行后续调用。我的接口是固定的,不能修改,所以只能使用构造函数来创建类...

unity.config 文件注册到统一框架:

<register type="MyNameSpace.IConfig, MyProject" mapTo="MyRealNameSpace.MyConfigurationClass, MyRealProject"> 
<lifetime type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" /> 
</register>

【问题讨论】:

  • 我不明白你的问题。你能详细说明你的期望吗?你的代码应该是什么样的?你到底想隐藏什么?
  • 我希望MyConfigurationClass Config = System.Configuration.ConfigurationManager.GetSection("Config") as MyConfigurationClass; 的初始化在MyConfigurationClass 的构造函数中完成,这意味着当我调用MyConfigurationClass Config = new MyConfigurationClass("Config"); 时,它会创建MyConfigurationClass Config,就像使用我当前的语句一样: MyConfigurationClass Config = System.Configuration.ConfigurationManager.GetSection("Config") as MyConfigurationClass;

标签: c# inheritance refactoring new-operator


【解决方案1】:

就我个人而言,我喜欢添加一个静态 getter 来获取我的部分中的配置:

public class MyConfigurationClass : ConfigurationSection
{
        public static MyConfigurationClass Instance { get; } =
            ConfigurationManager.GetSection("Config") as MyConfigurationClass;

        // other configuration properties
}

然后我只需拨打MyConfigurationClass.Instance.Property

【讨论】:

  • 我正在尝试使用统一映射初始化此类的默认实例,然后在我的代码中使用接口进行后续调用。我的接口是固定的,不能修改,所以只能使用构造函数来创建类...
  • 如果您使用某种 DI(例如 unity),您可以注册一个工厂,该工厂将使用以下方法解析配置类型:container.RegisterFactory&lt;IMyConfigurationClass&gt;(f =&gt; MyConfigurationClass.Instance);
  • 我正在尝试从 unity.config &lt;register type="MyNameSpace.IConfig, MyProject" mapTo="MyRealNameSpace.MyConfigurationClass, MyRealProject"&gt; &lt;lifetime type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" /&gt; &lt;/register&gt;注册它
猜你喜欢
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多