C# Autofac代表工厂,并传递容器

C# Autofac代表工厂,并传递容器,c#,dependency-injection,autofac,C#,Dependency Injection,Autofac,我有一个关于代理工厂的问题: 我了解他们是如何建立工厂的,但我不了解解决问题的部分: var shareholdingFactory = container.Resolve<Shareholding.Factory>(); var shareholding = shareholdingFactory.Invoke("ABC", 1234); 看起来您必须绕过容器才能解决此问题。也许我必须调用一些只有在运行时才知道的参数。我如何在不将容器传递给例如服务方法的情况下做到这一点 更新 那

我有一个关于代理工厂的问题:

我了解他们是如何建立工厂的,但我不了解解决问题的部分:

var shareholdingFactory = container.Resolve<Shareholding.Factory>();
var shareholding = shareholdingFactory.Invoke("ABC", 1234);
看起来您必须绕过容器才能解决此问题。也许我必须调用一些只有在运行时才知道的参数。我如何在不将容器传递给例如服务方法的情况下做到这一点

更新


那么你应该通过工厂吗

Autofac可以自动解析工厂,即在没有容器的情况下:

public class ShareHolding
{
    public ShareHolding(int accountId)
    {
        // do whatever you want
    }
}

public class MyApp
{
    private readonly ShareHolding _shareHolding;
    public MyApp(Func<int, ShareHolding> shareHoldingFactory)
    {
        _shareHolding = shareHoldingFactory(99);
    }

    public void Run()
    {
        // do whatever you want with the _shareHolding object
    }
}
然后需要一个委托工厂,因为Autofac使用类型信息解析构造函数,使用参数名称解析委托工厂。您的使用将变成:

public class MyApp
{
    public MyApp(ShareHolding.Factory shareHoldingFactory)
    {
        ....
    }
}

Autofac可以自动解析工厂,即在没有容器的情况下:

public class ShareHolding
{
    public ShareHolding(int accountId)
    {
        // do whatever you want
    }
}

public class MyApp
{
    private readonly ShareHolding _shareHolding;
    public MyApp(Func<int, ShareHolding> shareHoldingFactory)
    {
        _shareHolding = shareHoldingFactory(99);
    }

    public void Run()
    {
        // do whatever you want with the _shareHolding object
    }
}
然后需要一个委托工厂,因为Autofac使用类型信息解析构造函数,使用参数名称解析委托工厂。您的使用将变成:

public class MyApp
{
    public MyApp(ShareHolding.Factory shareHoldingFactory)
    {
        ....
    }
}

只需查看下面的公文包部分:。在您的类中,您不需要容器,只需将工厂注入到类的构造函数中即可:public class MyService{public MyService hareholding.factory factory工厂{//使用工厂做点什么}}我怎么会错过它呢:/将它放入一个答案中,在我有时间测试它时我会接受它。谢谢只需查看下面的公文包部分:。在您的类中,您不需要容器,只需将工厂注入到类的构造函数中即可:public class MyService{public MyService hareholding.factory factory工厂{//使用工厂做点什么}}我怎么会错过它呢:/将它放入一个答案中,在我有时间测试它时我会接受它。谢谢