具有默认参数的 Autofac 类 ->覆盖 att 运行时

发布于 2024-11-10 16:08:03 字数 1017 浏览 2 评论 0原文

我希望能够解析一个带有发送到构造函数的默认参数的类,但我希望能够在指定参数时覆盖它。

这是我注册的方式:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一曲爱恨情仇 2024-11-17 16:08:03

下面是一个完整而简单的示例,展示了如何在运行时覆盖注册时配置的 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;
        }
    }
}

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 for Thing's constructor is 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;
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文