このクラスの設計上の問題が何度も何度も発生し、私は何か間違ったことをしているに違いないことに気づきました。アイデアは、クラス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"]; }
}
}
明らかに、このコードはコンパイルされません。 同じ原則を達成するために行うことができるこのコードへの小さな変更はありますか? それとも、まったく異なるアプローチを一緒に行う必要がありますか?
目標は、構成ファイルに設定された単純な依存性注入を使用して、作成する要求のタイプを決定できるようにすることです。