在使用StructureMap在WebAPI中实现DI时,我们使用
中的 ServiceActivatorpublic class ServiceActivator : IHttpControllerActivator
{
public ServiceActivator(HttpConfiguration configuration) {}
public IHttpController Create(HttpRequestMessage request,
HttpControllerDescriptor controllerDescriptor, Type controllerType)
{
var controller = ObjectFactory.GetInstance(controllerType) as IHttpController;
return controller;
}
}
但现在使用新的 StructureMap ,我的ReSharper建议:
类'StructureMap.ObjectFactory'已过时:将在未来的StructureMap 4.0版本中删除ObjectFactory。支持使用Container类进行将来的工作
Container
上的intellisense给了我非常有限的信息。
我们应该如何使用容器类重写 ServiceActivator ?
答案 0 :(得分:36)
static stuff is going away。如果您没有使用某种类型的服务定位器,那么您将referenced here实施自己的“ObjectFactory
”:
public static class ObjectFactory
{
private static readonly Lazy<Container> _containerBuilder =
new Lazy<Container>(defaultContainer, LazyThreadSafetyMode.ExecutionAndPublication);
public static IContainer Container
{
get { return _containerBuilder.Value; }
}
private static Container defaultContainer()
{
return new Container(x =>
{
// default config
});
}
}
更新:我之前的回答是错误的。感谢@JoeMighty的领导。