c# - Should I be using generics to simplify my configuration provider class? -


i attempting write configuration manager can supply configuration settings different providers (e.g. settings files, environment variables, databases etc).

i have envisioned settings either strings, ints or doubles , identified name

settings provided via classes implementing this:

public interface iconfigurationmanagerprovider {     t getsetting<t>(string name);     ienumerable<configurationsetting> getknownsettings(); } 

as start trying write provider return environment variables

public class environmentvariableprovider : iconfigurationmanagerprovider {     public t getsetting<t>(string name)      {         string value = environment.getenvironmentvariable(name);         return value t;     }      public ienumerable<configurationsetting> getknownsettings()     {         return new list<configurationsetting>         {             new configurationsetting("my_tracing", typeof (string)),         };     } } 

however won't compile can't cast t. if put class constraint in limits me strings

public t getsetting<t>(string name) t : class {     string value = environment.getenvironmentvariable(name);     return value t; } 

really provider can supply strings (other providers different) want code access configuration settings clean possible using like:

public interface iconfigurationmanagerconsumer {     t getconfiguration<t>(string name, t systemdefault); } 

and used this:

string tracing = configurationmanager.getconfiguration("my_tracing", "unknown"); 

or this:

int maxusercount = = configurationmanager.getconfiguration("max user count", 10); 

or this:

double pi = configurationmanager.getconfiguration("pi", 3.14159); 

am going in right direction?

use convert.changetype

return (t)convert.changetype(value, typeof(t)); 

Comments

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -