簡體   English   中英

如何在Autofac中間接傳遞參數

[英]How to pass a parameter indirectly in Autofac

我有一個通過Func<Owned<OwnedDependency>>注入的依賴Func<Owned<OwnedDependency>> 其依賴項之一需要一個僅在構造OwnedDependency時才具有的參數。

public class OwnedDependency
{
    public OwnedDependency(IDependency1 dependency)
    {
    }
}

public interface IDependency1
{
}

public class Dependency1 : IDependency1
{
    public Dependency1(MyParameter parameter)
    {
    }
}

public class MyClass
{
    private readonly Func<Owned<OwnedDependency>> m_ownedDependencyFactory;

    public MyClass(Func<Owned<OwnedDependency>> ownedDependencyFactory)
    {
        m_ownedDependencyFactory = ownedDependencyFactory;
    }

    public void CreateOwnedDependency()
    {
        var parameter = new MyParameter(...);
        // ** how to setup parameter with the container? **

        using (var ownedDependency = m_ownedDependencyFactory())
        {
        }
    }
}

我想不出一種干凈的方法來設置MyParameter實例。

我探索過的一種方法是將ILifetimeScope注入MyClass中,然后執行以下操作:

var parameter = new MyParameter(...);

using (var newScope = m_lifetimeScope.BeginLifetimeScope())
{
    newScope.Resolve<IDependency1>(new TypedParameter(typeof(MyParameter), parameter));
    var ownedDependency = newScope.Resolve<OwnedDependency>();
    // ...
}

但是容器變得不必要地侵入。 理想情況下,我想做的是注入Func<IDependency1, Owned<OwnedDependency>> ,並且容器願意使用傳入的參數來滿足任何必要的依賴關系,而不僅僅是OwnedDependency上的參數。

將另一個工廠用於IDependency1可以IDependency1進行IDependency1

public class MyClass
{
    private Func<MyParameter, IDependency1> dependency1Factory;
    private Func<IDependency1, Owned<OwnedDependency>> ownedDependencyFactory;


    public MyClass(
        Func<MyParameter, IDependency1> dependency1Factory,
        Func<IDependency1, Owned<OwnedDependency>> ownedDependencyFactory)
    {
        this.dependency1Factory = dependency1Factory;
        this.ownedDependencyFactory = ownedDependencyFactory;
    }

    public void CreateOwnedDependency()
    {
        var parameter = new MyParameter();
        using (var owned = ownedDependencyFactory(dependency1Factory(parameter)))
        {
        }

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM