如何在.NET核心库项目中将一个类注入另一个类?在API项目中的StartUp类ConfigureServices中,我应该在哪里配置DI?
依赖关系注入是在组合根目录(基本上是应用程序入口点)上配置的。如果无法控制应用程序入口点,则不能强制任何人对类库使用依赖关系注入。但是,您可以使用基于接口的编程并创建帮助程序类,以便为各种组合根方案注册库中的每个类型,这将允许人们使用 IOC 实例化您的服务,无论他们正在创建哪种类型的程序。
您可以做的是使类库中的服务依赖于库中其他服务的接口,以便使用它们的自然方法是将服务注册到正在使用的容器中,并允许进行更有效的单元测试。
关于如何管理它,有许多思考过程,因为最终,调用者需要为您注册您的DI进程。
如果您查看Microsoft和其他公司使用的方法,您通常会将使用“AddMyCustomLibrary”等方法定义的扩展方法作为IServiceCollection的扩展方法。这里有一些讨论。
在谷歌搜索了很多之后,我无法找到一个全面的答案,并举例说明这个问题。以下是在类库中使用 DI 应该执行的操作。
在您的库中:
public class TestService : ITestService
{
private readonly ITestManager _testManager;
public TestService(ITestManager testManager)
{
_testManager = testManager;
}
}
public class TestManager : ITestManager
{
private readonly ITestManager _testManager;
public TestManager()
{
}
}
然后在库中扩展IServiceCollection:
public static class ServiceCollectionExtensions
{
public static void AddTest(this IServiceCollection services)
{
services.AddScoped<ITestManager, TestManager>();
services.AddScoped<ITestService, TestService>();
}
}
最后,在主应用程序启动(API、控制台等)中:
public void ConfigureServices(IServiceCollection services)
{
services.AddTest();
}
复合在这种情况下“消耗”一个子对象数组,从某种意义上说,“吸入”用密钥注册的IFoo的每个实现。这是一个重要的方面:如果您要用一个键注册复合,它将尝试实例化自己,并立即导致StackOverflow异常。 本机DI不支持这些命名注册。 这个例子是从这里提取的
我有一个.NET core项目,并且正在尝试使用授权选项创建自定义策略,如此处的文档所示: ASP.NET.Core授权-需求处理程序中的依赖注入 这些示例显示了使用 1 个参数(一个简单的 int 值)设置授权要求。我的自定义要求需要一个字符串参数以及一个 DbContext 对象。我想在运行时将 DbContext 注入到需求的构造函数中。我正在使用 Autofac 容器。我不确定如何实现这一
我的大多数服务通常与crud方法相同
我试图在AppService的XUnit测试中实现依赖注入。理想的目标是运行原始的应用程序启动/配置,并使用启动中的任何依赖注入,而不是在我的测试中重新初始化所有的DI,这就是整个目标。 更新:莫森的答案很接近。需要更新两个语法/需求错误才能正常工作。 由于某些原因,原始应用程序可以工作,并可以调用部门应用程序服务。然而,它无法调用Xunit。最后,使用原始应用程序的启动和配置使Testserve
我有一个ASP。NET核心2.1站点,注册了几个DbContext和一些条件连接字符串。 出于调试目的,我想列出所有注册的<code>DbContext</code>及其连接字符串,以确保所有内容都配置良好。 这只是一个“测试”功能,不用于任何其他用途,因此请不要回答“您不应该这样做”、“它是反模式”等。
有谁知道我们可以下载jboss common core及其所有依赖项的存储库吗。依赖项是无法找到的。 我试过了http://mvnrepository.com/artifact/jboss/jboss-common-core/2.0.4.GA和https://repository.jboss.org/nexus/content/groups/public/jboss/jboss-common-co