具有默认参数的 Autofac 类 ->覆盖 att 运行时
我希望能够解析一个带有发送到构造函数的默认参数的类,但我希望能够在指定参数时覆盖它。
这是我注册的方式:
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();
要解决这个问题,我希望能够做到这一点:
_containerProvider.RequestLifetime.Resolve<ISearchService<WebPage>();
效果很好,但我也希望能够做到这一点:
_containerProvider.RequestLifetime.Resolve<ISearchService<WebPage>(new NamedParameter("Url", "some other url"));
这不起作用..所以我的问题是是否可以使用默认值进行注册我希望能够在运行时覆盖哪个参数?
I want to be able to resolve a class with default parameters sent to the constructor but i want to be able to override this when i specify a parameter.
Here is how i register:
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();
To resolve i would like to be able to this:
_containerProvider.RequestLifetime.Resolve<ISearchService<WebPage>();
which works excellent but i also want to be able to do this:
_containerProvider.RequestLifetime.Resolve<ISearchService<WebPage>(new NamedParameter("Url", "some other url"));
which does not work .. So my question is if it is possible to register with a default parameter which i want to be able to override at runtime??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
下面是一个完整而简单的示例,展示了如何在运行时覆盖注册时配置的
NamedParameter
。重要提示:您用于
NamedParameter
的参数名称必须与您注册并解析的类的构造函数中的参数名称相匹配。在下面的示例中,Thing
构造函数的参数是name
。Below is a complete and simple example showing how to override at runtime, a
NamedParameter
configured at registration time.Important: The parameter name you use for the
NamedParameter
must match the parameter name in the constructor of the class you register and then resolve. In the example below, the parameter forThing
's constructor isname
.