首页 > 解决方案 > 使用 autofac 解决在不同项目中注册的组件的依赖关系

问题描述

所以我有一个基础设施层(Project1),我在其中注册所有模块,所以我使用 Autofac,它是这样的:

builder.RegisterType<MyConcreteClass>().As<IMyInterface>()
                .WithParameter(new TypedParameter(typeof(string), "myParameter1"))
                .WithParameter(new TypedParameter(typeof(string), "myParameter2"));

在另一个项目(Project2)中,我有一个服务,我将调用 MyService,它调用 MyConcreteClass,我打算解决它,但不确定如何解决。首先,在第二个项目中找到了 appsettings,它是一个 dotnet 核心项目,我知道我可以通过在这个 MyService 中注入 IConfiguration 来轻松获取 appsettings,然后类似于:var myParam1 = Configuration["UsefulSettings:MyParameter1"]

两个问题:

  1. 我是否应该在 Project1 中解析 MyConcreteClass 的 c-tor 的参数,我在其中将 MyConcreteClass 注册为 IMyInterface 的实现(所以基本上,我问我是否应该同时注册和解析)?如果是这样,考虑到在 Project2 appsettings 中找到的参数,我该怎么做?

  2. 如果我可以在 Project2 中解析 MyConcreteClass(在 Project1 中注册之后),这是如何完成的?在 Autofac 文档中,我注意到他们使用类似(https://autofaccn.readthedocs.io/en/latest/resolve/parameters.html)的东西:

var service = scope.Resolve<IMyInterface>()

.WithParameter(new TypedParameter(typeof(string), Configuration["UsefulSettings:MyParameter1"]))

.WithParameter(new TypedParameter(typeof(string), Configuration["UsefulSettings:MyParameter2"])));

...但谁是范围

那么,哪种方法更好,1 还是 2,你能帮忙填补空白吗?

谢谢你。

标签: dependency-injectionautofacresolveclean-architecture

解决方案


推荐阅读