簡體   English   中英

如何使用配置注冊 Autofac 模塊

[英]How do I Register Autofac Module with Configuration

我有一個控制台應用程序,它引用了 class 庫,它本身引用了 class 庫(瀑布)。 問題是我想通過 Autofac 模塊傳遞 IConfiguration 來注冊我的IConfiguration ,然后讓它們在最底層的庫中訪問,但我不確定如何實現這一點。 (我的設計重點是有一個獨立的 NuGet package 可以被控制台應用程序或網站引用)

關鍵是我想在我的新網站上注冊主要的.dll ( Notification.Send ) 而不必擔心注冊較低的杠桿.dll ( Notification.Queue ) 但仍然可以訪問網站appsettings.json 這是我的例子

控制台應用程序

    class Program
    {
        static void Main(string[] args)
        {
            IConfiguration Configuration = new ConfigurationBuilder()
               .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
               .AddEnvironmentVariables()
               .AddCommandLine(args)
               .Build();

            var builder = new ContainerBuilder();
            //How to pass "Configuration" to SendNotificationModule?
            builder.RegisterModule(new SendNotificationModule());
        }
    }

通知.發送(圖書館)

    public class SendNotificationModule : Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            base.Load(builder);

            //How to pass "Configuration" to QueueModule?
            builder.RegisterModule(new QueueModule());
        }
    }

Notifications.Queue(庫)

    public class QueueModule : Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            base.Load(builder);

            //Here I want to register a custom interface which I can use to retrieve config from
            //and then use for DI in my Notifications.Queue dll

        }
    }

我對 Autofac 不太熟悉,也許找錯了樹,但我到處搜索,但無法弄清楚。

你為什么不通過模塊構造函數傳遞它?

class Program
{
    static void Main(string[] args)
    {
        var configuration = // ..
        builder.RegisterModule(new SendNotificationModule(configuration));
    }
}

通知.發送(圖書館)

public class SendNotificationModule : Module
{
    private readonly IConfiguration configuration;

    public SendNotificationModule(IConfiguration configuration)
    {
        this.configuration = configuration;
    }

    protected override void Load(ContainerBuilder builder)
    {
        base.Load(builder);
        builder.RegisterModule(new QueueModule(configuration));
    }
}

Notifications.Queue(庫)

public class QueueModule : Module
{
    private readonly IConfiguration configuration;

    public QueueModule (IConfiguration configuration)
    {
        this.configuration = configuration;
    }

    protected override void Load(ContainerBuilder builder)
    {
        base.Load(builder);

        //Here I want to register a custom interface which I can use to retrieve config from
        //and then use for DI in my Notifications.Queue dll

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM