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}
占位符,在该占位符中,您可以在格式化字符串之后指定实际参数。这里是相同的,但参数可能取决于请求
对不起,如果它没有马上编译,就没有访问笔记本电脑进行验证