クラスIoC<TContainer>
をTContainer
含むモジュールで使用する IoC コンテナーをラップするクラスです。次のように実装されます。
public class IoC<TContainer>
where TContainer : IServiceLocator
{
public static TContainer Container { get; set; }
public static T Resolve<T>()
{
return Container.Resolve<T>();
}
public static object Resolve(Type type)
{
return Container.Resolve(type);
}
public static IEnumerable<T> ResolveAll<T>()
{
return Container.ResolveAll<T>();
}
public static IEnumerable ResolveAll(Type type)
{
return Container.ResolveAll(type);
}
}
現在、このように初期化する必要がある場所
IoC<StructureMapServiceLocator>.Container = ...
使い方を簡単にするために、次のようなクラスを定義しようとしました。
public class SMIoC : IoC<StructureMapServiceLocator>
{
private SMIoC()
{}
static SMIoC()
{
Container = ... // Initialization
}
}
ただし、これは機能せず (前の質問)、これは悪い設計であることが示唆されました。初期化を自動化するにはどうすればよいですか (静的コンストラクターを使用するか、他の方法を使用して)、または他のトリックを使用できますか?