文字列をそれぞれの型に変換する一連の値型変換器があります。私は必要に応じて、タイプに基づいてこれらのコンバータを作成する責任がある工場を持っています。私は工場とコンバーターを汎用的に保つために努力していますが、私はいくつかの問題を抱えています。私は工場で.Createメソッドを呼び出すまで型を知らないので、その型を引数として渡せるようにする必要があります。問題は、私の.CreateメソッドがValueConverter<int>
のようなより適切な値コンバータの代わりにValueConverter<Type>
を探していると思うということです。私は何かを逃している、あるいはおそらくそれを完全に間違っている。ここで 汎用クラスを作成する汎用ファクトリ
public class ValueConverterFactory : IValueConverterFactory
{
private readonly IUnityContainer _container;
public ValueConverterFactory(IUnityContainer container)
{
_container = container;
}
public IValueConverter<T> Create<T>(T type)
{
return _container.Resolve<IValueConverter<T>>();
}
}
と団結はこのようなものを設定されています:
Container.RegisterType<IValueConverter<int>, IntValueConverter>();
Container.RegisterType<IValueConverter<DateTime>, DateTimeValueConverter>();
その後
public interface IValueConverter<T>
{
T Convert(object objectToConvert);
}
public class IntValueConverter : IValueConverter<int>
{
public int Convert(object objectToConvert)
{
return System.Convert.ToInt32(objectToConvert);
}
}
public class DateTimeValueConverter : IValueConverter<DateTime>
{
public DateTime Convert(object objectToConvert)
{
return System.Convert.ToDateTime(objectToConvert);
}
}
、私はこのような工場を持っています
私はこのように工場に電話する必要があります:
var objectType = someObj.GetType();
var valueConverter = _valueConverterFactory.Create(objectType);
どのようにCreateメソッドを呼び出すのですか?問題はIoCのものかもしれません。私はそれを一度も使用しておらず、言い訳もできません。しかし、単純な工場では、次のことができます:IConverter myConverter = factory.Create (typeof(int)); –
Sisyphus
実行時まで型がわからないため、型を汎用メソッド呼び出しで指定できません。 –
あなたがしようとしていることを実行できるかどうかは分かりません。あなたは、ランタイムまで型を知らないと言っています。しかし、Convertを使用するには、int myVar = Convert ...と言う必要がありますか、多分var myVar = Convertをしようとしていますか?私は暗黙の型を使用することに精通していないので、読みやすさやその他の側面(私はLINQではなくnhibを使用しています)のために暗黙の型定義のファンではありませんが、コンパイラは何とか型を決定できる必要があります。あなたは完全にタイピングするのを避けるためにそれを使うことはできません。コンパイラが意図した実装から型を推論する方法がわかりません。 – Sisyphus