さて、私はDIをWebAPIで動作させる方法に関する多くの投稿を見てきました。単純なctorインジェクションを実行しようとしています。ここに貼り付けているものは機能しますが、それは私がそれに満足しているという意味ではありません。誰かアドバイスがあれば、音を立ててください。
WEB APIでのコントローラーの作成を制御する必要がないようです。そのため、依存関係の適切な解放に疑問が生じます。スコープとして設定しました。コードを見るとわかります。IDependencyResolverを使用する必要がありますが、これはIControllerActivatorで試した他のフックが機能していないように見えるため、私が見つけることができる唯一の回避策です。
コードを参照してください。
public class WindsorWeApiResolver:WindsorWebApiDependencyScope,IDependencyResolver
{
private readonly IWindsorContainer _container;
public WindsorWeApiResolver(IWindsorContainer container) : base(container)
{
_container = container;
}
public IDependencyScope BeginScope()
{
return new WindsorWebApiDependencyScope(_container);
}
}
public class WindsorWebApiDependencyScope:IDependencyScope
{
private readonly IWindsorContainer _container;
private readonly IDisposable _scope;
public WindsorWebApiDependencyScope(IWindsorContainer container)
{
_container = container;
_scope = _container.BeginScope();
}
public void Dispose()
{
_scope.Dispose();
}
public object GetService(Type serviceType)
{
return _container.Kernel.HasComponent(serviceType) ? _container.Resolve(serviceType) : null;
}
public IEnumerable<object> GetServices(Type serviceType)
{
return _container.ResolveAll(serviceType).Cast<object>().ToArray();
}
}