StructureMapを使用してWebAPIにDIを実装する場合、ServiceActivatorを使用しました
public 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」は廃止されました。ObjectFactoryは、StructureMapの将来の4.0リリースで削除されます。将来の作業のためにContainerクラスの使用を優先する
Container
のインテリセンスにより、非常に限られた情報しか得られませんでした。
ServiceActivatorをContainerクラスで書き換える方法を教えてください。
静的なものはなくなります 。何らかのタイプのサービスロケーターを使用しない場合は、独自の "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に感謝します。