JcM*_*y3r 1 c# dependency-injection autofac .net-core
我有一个控制台应用程序,其中引用了一个类库,该应用程序本身也引用了一个类库(瀑布)。问题是我想IConfiguration通过 Autofac 模块传递它来注册我的,然后让它们在最低的库中访问,我不知道如何实现这一点。(我的设计要点是拥有一个独立的 NuGet 包,可以通过控制台应用程序或网站引用)
重点是我想在我的新网站中注册 main .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());
}
}
Run Code Online (Sandbox Code Playgroud)
通知.发送(库)
public class SendNotificationModule : Module
{
protected override void Load(ContainerBuilder builder)
{
base.Load(builder);
//How to pass "Configuration" to QueueModule?
builder.RegisterModule(new QueueModule());
}
}
Run Code Online (Sandbox Code Playgroud)
通知.队列(库)
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
}
}
Run Code Online (Sandbox Code Playgroud)
我对 Autofac 不太熟悉,也许找错了树,但我到处搜索过,但无法弄清楚这一点。
为什么不通过模块构造函数传递它?
class Program
{
static void Main(string[] args)
{
var configuration = // ..
builder.RegisterModule(new SendNotificationModule(configuration));
}
}
Run Code Online (Sandbox Code Playgroud)
通知.发送(库)
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));
}
}
Run Code Online (Sandbox Code Playgroud)
通知.队列(库)
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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7447 次 |
| 最近记录: |