1

Autofac を使い始めたばかりで、次のコードがあります。

public class _default : System.Web.UI.Page, IUserInformationProvider
{
    protected void Page_Load(object sender, System.EventArgs e)
    {
        ControllerFactory cf;
        using (scope == ((Global_asax)this.Context.ApplicationInstance).ContainerProvider.ApplicationContainer.BeginLifetimeScope()) {
            cf = scope.Resolve<IControllerFactory>();  // <-- would love to pass "this" somewhere here, but how???
        }
    }

}

ControllerFactory は以下で定義されており、IUserInformationProvider インターフェイスも受け取ります。WebForm のインスタンスをパラメーターとして Resolve IControllerFactory に渡したいと思います。

public class ControllerFactory : IControllerFactory
{
    protected IUserInformationProvider _userInformation;
    public ControllerFactory(IUserInformationProvider userInformation)
    {
        _userInformation = userInformation;
    }
}

ドキュメントを見ると、3 つのパラメーター タイプ (Named、Typed、Resolved) があることがわかりますが、最初の 2 つは定数値のみを取ります。解決されたパラメーターが進むべき道のようですが、それを実装する方法、またはそれが正しい戦略であるかどうかについて、私はちょっと迷っています。そして、builder.Register はどのように見えるでしょうか?

4

2 に答える 2

0

コントローラーにプロパティの依存関係を導入して、依存関係のサイクルを断ち切ります。

public class ControllerFactory : IControllerFactory
{
    public ControllerFactory() { }

    // Property dependency (part of IControllerFactory interface)
    public IUserInformationProvider UserInformation { get; set; }
}

このようにして、Autofac がその型を構築した後に値を設定できます。

var factory = scope.Resolve<IControllerFactory>();
factory.UserInformation = this;
cf = factory;
于 2013-07-24T07:40:55.800 に答える