我们有一个类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
}
}
但是,这不起作用(较早的问题),并且有人认为这是一个糟糕的设计。如何自动化初始化(使用静态构造函数或其他方法)或其他技巧?