.net 使用AutoFac创建未定义长度的对象集合
我从第三方供应商那里得到一些报价。我正在将引号传输到本地对象,但需要有关如何为列表创建新引号对象的建议,如果您不知道构造函数中需要多少引号 我试过这个.net 使用AutoFac创建未定义长度的对象集合,.net,dependency-injection,autofac,.net,Dependency Injection,Autofac,我从第三方供应商那里得到一些报价。我正在将引号传输到本地对象,但需要有关如何为列表创建新引号对象的建议,如果您不知道构造函数中需要多少引号 我试过这个 public class ConvertThirdPartyQuoteToLocalQuote { private readonly IQuote quote; public ConvertThirdPartyQuoteToLocalQuote(IQuote quote) {
public class ConvertThirdPartyQuoteToLocalQuote
{
private readonly IQuote quote;
public ConvertThirdPartyQuoteToLocalQuote(IQuote quote)
{
this.quote = quote;
}
public IQuote ConvertToDomainQuote(List<ThirdPartyQuote> thirdPartyQuotes)
{
var response = new List<IQuote>();
foreach (var thirdPartyQuote in thirdPartyQuotes)
{
quote.Price = thirdPartyQuote.Price;
quote.Description = thirdPartyQuote.Price;
response.Add(quote);
}
return response;
}
}
public类ConvertThirdPartyQuoteToLocalQuote
{
私人只读iNote报价;
公共兑换第三方报价至本地报价(iNote报价)
{
this.quote=quote;
}
公共iNote转换域报价(列出第三方报价)
{
var response=newlist();
foreach(第三方报价中的第三方报价)
{
quote.Price=第三方quote.Price;
quote.Description=第三方quote.Price;
回复。添加(报价);
}
返回响应;
}
}
但它只是重写了同一个对象
我想做这样的事情,但不知道怎么做
public class ConvertThirdPartyQuoteToLocalQuote
{
public IQuote ConvertToDomainQuote(List<ThirdPartyQuote> thirdPartyQuotes)
{
var response = new List<IQuote>();
foreach (var thirdPartyQuote in thirdPartyQuotes)
{
// Use autofac to new up an instance in each loop
// or pass it through the constructor
quote.Price = thirdPartyQuote.Price;
quote.Description = thirdPartyQuote.Price;
response.Add(quote);
}
return response;
}
}
public类ConvertThirdPartyQuoteToLocalQuote
{
公共iNote转换域报价(列出第三方报价)
{
var response=newlist();
foreach(第三方报价中的第三方报价)
{
//使用autofac在每个循环中新建一个实例
//或者通过构造函数传递它
quote.Price=第三方quote.Price;
quote.Description=第三方quote.Price;
回复。添加(报价);
}
返回响应;
}
}
如果可以避免的话,我真的不想用autofac代码污染我的代码,所以最好通过构造函数传递对象,但我愿意妥协
有什么想法吗?您可以通过使用委托注入来避免对容器的依赖
public class ConvertThirdPartyQuoteToLocalQuote
{
private readonly Func<IQuote> quoteBuilder;
public ConvertThirdPartyQuoteToLocalQuote(
Func<IQuote> quoteBuilder)
{
this.quoteBuilder = quoteBuilder;
}
public IEnumerable<IQuote> ConvertToDomainQuote(
IEnumerable<ThirdPartyQuote> thirdPartyQuotes)
{
foreach (var thirdPartyQuote in thirdPartyQuotes)
{
IQuote quote = this.quoteBuilder();
quote.Price = thirdPartyQuote.Price;
quote.Description = thirdPartyQuote.Price;
yield return quote;
}
}
}
public类ConvertThirdPartyQuoteToLocalQuote
{
私有只读Func quoteBuilder;
公共转换第三方报价至本地报价(
Func quoteBuilder)
{
this.quoteBuilder=quoteBuilder;
}
公共IEnumerable converttoomainquote(
IEnumerable第三方报价)
{
foreach(第三方报价中的第三方报价)
{
iNote quote=this.quoteBuilder();
quote.Price=第三方quote.Price;
quote.Description=第三方quote.Price;
收益回报报价;
}
}
}
配置如下所示:
var mainBuilder = new ContainerBuilder();
mainBuilder.RegisterType<IQuote>().As<Quote>();
mainBuilder.Register((c, p) =>
new ConvertThirdPartyQuoteToLocalQuote(() => c.Resolve<IQuote>()));
IContainer container = mainBuilder.Build();
var mainBuilder=newcontainerbuilder();
mainBuilder.RegisterType().As();
主生成器注册表((c,p)=>
新的ConvertThirdPartyQuoteLocalQuote(()=>c.Resolve());
IContainer容器=mainBuilder.Build();
如果我想将参数传递到quoteBuilder()中,以便添加到构造函数中,该怎么办?例如var someValue=“someValue”;iNote quote=this.quoteBuilder(someValue)@user1838438如果您想要将某个内容传递到构造函数中,那么容器不应该是等式的一部分。您应该只new
创建一个Quote
对象-尝试将容器的使用限制为服务注入,而不是创建Dto
类型的实例。