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工厂{//使用工厂做点什么}}我怎么会错过它呢:/将它放入一个答案中,在我有时间测试它时我会接受它。谢谢