gpt4 book ai didi

c# - Microsoft 依赖项注入(inject)文档

转载 作者:行者123 更新时间:2023-11-30 21:31:53 25 4
gpt4 key购买 nike

在依赖注入(inject)的文档中,我注意到以下行。

The MVC framework will automatically look at the service provider to register our dependency in the Controller.

然后他们提供了一个构造函数注入(inject)的基本示例,不是他们的示例,而是本质上的这个。

public class Example
{
private IFooFactory foo;

public Example(IFooFactory foo) => this.foo = foo;

public void SampleUse()
{
using(var context = foo.Create())
context.DoSomething();
}
}

如果你有一个控制台应用程序,默认情况下它不会查看服务提供者来注册你对具体实现的依赖。有没有办法模拟它?否则,控制台应用程序将要求您按照以下方式执行某些操作:

public static Main(string[] args)
{
// Stuff to prepare the application and build service provider.
var service = serviceProvider.GetService<IFooFactory>();
using(var context = service.Create())
context.DoSomething();

// OR

var fooFactory = serviceProvider.GetService<IFooFactory>();
new Example(fooFactory).SampleUse();
}

这会产生一个问题,即必须传递 IFooFactory 或将您可能希望分离结构的内容拉入主体。当使用定义的接口(interface)创建新类时,如何让控制台应用程序查看提供者?

最佳答案

您必须手动创建所有内容,因为框架无法自动为您完成。

var services = new ServiceCollection();
services.AddTransient<IFooFactory, FooFactory>();
services.AddTransient<Example>();

IServiceProvider serviceProvider = services.BuildServiceProvider();

Example example = serviceProvider.GetService<Example>();

example.SampleUse();

虽然不理想,但大多数示例中通常采用手动配置 DI 的方式。

当您检查框架 DI 集成时,它在幕后在启动期间执行完全相同的操作。

您可能会编写自己的代码来检查可用类型,但这是一项需要您自己解决的非常广泛的任务。

引用 Dependency injection in ASP.NET Core

Default service container replacement

The built-in service container is meant to serve the needs of the framework and most consumer apps. We recommend using the built-in container unless you need a specific feature that it doesn't support. Some of the features supported in 3rd party containers not found in the built-in container:

  • Property injection
  • Injection based on name
  • Child containers
  • Custom lifetime management
  • Func<T> support for lazy initialization

关于c# - Microsoft 依赖项注入(inject)文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52743599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com