我希望能够解析一个具有发送到构造函数的默认参数的类,但我希望能够在指定参数时覆盖它.
这是我如何注册:
builder.RegisterType<SearchService<WebPage>>().As<ISearchService<WebPage>>().WithParameter(
new NamedParameter("solrUrl", ConfigurationManager.AppSettings["UrlWeb"])).SingleInstance();
builder.RegisterType<SearchService<Document>>().As<ISearchService<Document>>().WithParameter(
new NamedParameter("Url", ConfigurationManager.AppSettings["solrUrlDocs"])).SingleInstance();
Run Code Online (Sandbox Code Playgroud)
要解决我希望能够这样:
_containerProvider.RequestLifetime.Resolve<ISearchService<WebPage>();
Run Code Online (Sandbox Code Playgroud)
这工作很好,但我也希望能够做到这一点:
_containerProvider.RequestLifetime.Resolve<ISearchService<WebPage>(new NamedParameter("Url", "some other url"));
Run Code Online (Sandbox Code Playgroud)
哪个不起作用..所以我的问题是,是否可以注册一个默认参数,我希望能够在运行时覆盖?
下面是一个完整而简单的示例,说明如何在运行时覆盖,NamedParameter在注册时配置.
要点:您用于的NamedParameter参数名称必须与您注册的类的构造函数中的参数名称匹配,然后才能解析.在下面的示例中,Thing构造函数的参数是name.
using System;
using Autofac;
namespace BillAndBenConsole
{
internal class Program
{
private static void Main(string[] args)
{
var builder = new ContainerBuilder();
builder.RegisterType<Thing>().WithParameter("name", "bill");
var container = builder.Build();
Console.WriteLine(container.Resolve<Thing>().Name);//Writes bill
Console.WriteLine(container.Resolve<Thing>().Name);//Writes bill
Console.WriteLine(container.Resolve<Thing>(new NamedParameter("name", "ben")).Name);//Writes ben
Console.ReadLine();
}
}
public class Thing
{
public string Name { get; set; }
public Thing(string name)
{
Name = name;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1792 次 |
| 最近记录: |