私は非常に原始的なDIフレームワークを持つことができるようにリゾルバを書いた。フレームワークでは、何も指定されていないか登録されていない場合、依存リゾルバがロードするデフォルトの型を指定することができます。オブジェクトを解決する最善の方法は何ですか?
しかし、デフォルトの読み込み方法は私には不思議に思っています。私はそれができる最善の方法をやっているのか分からない。
例:
T LoadDefaultForType<T>()
{
T _result = default(T);
if (typeof(T) == typeof(ISomeThing)
{
result = new SomeThing();
}
... more of the same
else
{
throw new NotSupportException("Give me something I can work with!");
}
return _result;
}
更新
これの使用は、モジュールまたはアセンブリが有するインターフェイスを設定していませんた場合に所定のインターフェイスのためのデフォルトのオブジェクトを取得することであろうコンクリートタイプ。例えばので
:他に何もISomeThingに登録されていない場合
IoC.Resolve<ISomeThing>();
は戻って私に何かオブジェクトを返す必要があります。この場合のLoadDefaultForTypeは、デフォルト(この場合は私のドメインモデルが何であれ)を使用するための最後の努力の一種です。
Resolveは、同様にこの上でいくつかの光を当てることがあります
T Resolve<T>()
{
T _result = default(T);
if (ContainedObjects.ContainsKey(typeof(T))
_result = (T)ContainedObjects[typeof(T)];
else
_result = LoadDefaultForType<T>();
return _result;
}
任意の考えを?コンベンションオーバコンフィグレーションのアプローチを可能にしようとしているので、デフォルトタイプをロードするためのより良い方法がありますか?
私は本当にあなたの属性のアイデアが好きです。私はそれが行く方法かもしれないと思う。 – Joseph
命名規則のアプローチでは、 "convention/configuration"とよく似ています。 – GalacticCowboy