C# 是否可以使用DryIoc将解析时使用的策略传递到工厂方法?

C# 是否可以使用DryIoc将解析时使用的策略传递到工厂方法?,c#,dryioc,C#,Dryioc,我正在尝试使用工厂将对象注册到容器中 void Main() { var container = new Container(); container.Register<IFactory, Factory>(); container.Register<IService>( made: Made.Of(r => ServiceInfo.Of<IFactory>(), f => f.Create("default

我正在尝试使用工厂将对象注册到容器中

void Main()
{
    var container = new Container();
    container.Register<IFactory, Factory>();
    container.Register<IService>(
        made: Made.Of(r => ServiceInfo.Of<IFactory>(), f => f.Create("default")));

    container.Resolve<IService>().Dump();
    container.Resolve<IService>("name1").Dump();
    container.Resolve<IService>("name2").Dump();
}

public interface IFactory
{
    IService Create(string name);
}

public class Factory : IFactory
{
    public IService Create(string name) => new Service(name);
}

public interface IService
{
    string Name { get; }
}

public class Service : IService
{
    public Service(string name) => Name = name;
    public string Name { get; }
}
我已经查看了名称空间,其中有
Arg.Of
ServiceInfo.Of
,但似乎没有任何迹象表明它可能有用

请注意,这个问题的有效答案甚至可能是“这是不可能的”。这可能是因为没有办法实现我的要求,而且实际上必须有多个注册,每个策略使用一个。

如果“策略”的意思是将一个
serviceKey
作为参数传递给工厂方法,您可以这样做

您需要一个
Arg.Index(int)
来指定工厂方法的自定义参数:

container.Register<IService>(
    made: Made.Of(r => ServiceInfo.Of<IFactory>(), f => f.Create(<what to put here>)));
                                                                         ^
                                                                         |
...                            +-----------------------------------------+
                               |
container.Resolve<IService>("name1");
可能是这样的:

container.Register<IService>( made: Made.Of(r => ServiceInfo.Of<IFactory>(), 
    f => f.Create(Arg.Index(0)),
    r => r.ServiceKey)); 
container.Register(made:made.Of(r=>ServiceInfo.Of()),
f=>f.Create(参数索引(0)),
r=>r.ServiceKey);
Arg.Index(0)
的工作原理类似于
string.Format
中的
{0}
占位符,在该占位符中,您可以在格式化字符串之后指定实际参数。这里是相同的,但参数可能取决于请求

对不起,如果它没有马上编译,就没有访问笔记本电脑进行验证