1

さて、私は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();
    }


}
4

2 に答える 2

1

IDependencyResolverが理想的ではないことに同意します。スコープにTypedFactoryFacilityを使用することで、MVCと戦うことなく、リリース方法の欠如を打ち消そうとしました。ここに私の投稿を参照してください。コントローラは通常どおりコンストラクタ引数を取ることができます。

于 2012-08-10T22:04:46.457 に答える
0

コンストラクタインジェクションの実装サンプルは次のとおりです。

http://nikosbaxevanis.com/2012/07/16/using-the-web-api-dependency-resolver-with-castle-windsor-scoped-lifetime/

于 2012-08-08T11:14:54.403 に答える