我一遍又一遍地遇到这个类设计问题,我开始意识到我一定做错了什么。这个想法是B类:A。这些类使用配置对象和BConfig:AConfig。问题是我想不出一个好方法来使 BConfig 中的属性可以访问。
这是该问题的简化示例。
public class Request{
public virtual RequestConfiguration Config{
get
{
if(Config == null)
Config= ConfigurationManager.GetSection("RequestConfig")
as RequestConfiguration;
return Config;
}
}
public virtual string DoSomething(){
return "Url:" + Config.Url;
}
}
public class AuthRequest : Request
{
public override RequestConfiguration Config
get
{
if(Config == null)
Config= ConfigurationManager.GetSection("RequestConfig")
as AuthRequestConfiguration;
return Config;
}
}
public override string DoSomething(){
return String.Format("Url:{0} U:{1} P:{2}",Config.Url,Config.User,Config.Pass);
}
}
/*---- Configuration Classes ----*/
public class RequestConfiguration : ConfigurationSection
{
[ConfigurationProperty("RequestHost", IsRequired = true)]
public string RequestHost
{
get { return (string)base["RequestHost"]; }
}
}
public class AuthRequestConfiguration : RequestConfiguration
{
[ConfigurationProperty("User", IsRequired = true)]
public string User
{
get { return (string)base["User"]; }
}
[ConfigurationProperty("Pass", IsRequired = true)]
public string Pass
{
get { return (string)base["Pass"]; }
}
}
显然这段代码不能编译。 是否可以对此代码进行任何小的更改以实现相同的原理? 还是我需要一起采取完全不同的方法?
目标是我可以使用配置文件中设置的简单依赖注入来确定要发出什么类型的请求。