0

I'm trying to implement a custom configuration class that would inherit System.Configuration.ConfigurationSection as its base class.

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

I've been creating the class object like this:

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

I want to move this into the constructor of my class so that instead of calling:

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

I could call:

MyConfigurationClass Config = new MyConfigurationClass("Config");

For the same ressult.

Inheriting elements of System.Configuration.ConfigurationSection is critical.

Any suggestions?

Edit: I am trying to initialize the default instance of this class using unity mapping and then use interfaces for the subsequent calls to this class. My interface is fixed and can not be modified and thus I can only use constructor to create the class...

Registration into unity framework is done from unity.config file:

<register type="MyNameSpace.IConfig, MyProject" mapTo="MyRealNameSpace.MyConfigurationClass, MyRealProject"> 
<lifetime type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" /> 
</register>
Laov
  • 65
  • 7
  • I don´t get your question. Can you please elaborate on what you expect? What should your code look like? What exactly do you want to hide? – MakePeaceGreatAgain Apr 30 '20 at 18:12
  • I would like my initialization of `MyConfigurationClass Config = System.Configuration.ConfigurationManager.GetSection("Config") as MyConfigurationClass;` to be done inside the constructor of `MyConfigurationClass` this means when I call `MyConfigurationClass Config = new MyConfigurationClass("Config");` it would create `MyConfigurationClass Config` the same way as using my current statement: `MyConfigurationClass Config = System.Configuration.ConfigurationManager.GetSection("Config") as MyConfigurationClass;` – Laov Apr 30 '20 at 18:14

1 Answers1

1

Personally, I like to add a static getter that fetches the configuration inside my section:

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

        // other configuration properties
}

And then I simply call MyConfigurationClass.Instance.Property

Amir Popovich
  • 29,350
  • 9
  • 53
  • 99
  • I am trying to initialize the default instance of this class using unity mapping and then use interfaces for the subsequent calls in my code. My interface is fixed and can not be modified and thus I can only use constructor to create the class... – Laov Apr 30 '20 at 18:29
  • If you are using some kind of DI (e.g. unity) you can register a factory that will resolve the config type using a method: `container.RegisterFactory(f => MyConfigurationClass.Instance);` – Amir Popovich Apr 30 '20 at 18:35
  • I am trying to register it from unity.config ` ` – Laov Apr 30 '20 at 18:38
  • 1
    https://stackoverflow.com/questions/9943216/unity-factory-via-xml – Amir Popovich Apr 30 '20 at 18:41