gpt4 book ai didi

dependency-injection - ASP.NET Core 中的属性注入(inject)

转载 作者:行者123 更新时间:2023-12-03 09:07:30 24 4
gpt4 key购买 nike

我正在尝试将 ASP.NET 应用程序移植到 ASP.NET Core。我在我的 UnitOfWork 实现上进行了属性注入(inject)(使用 Ninject),如下所示:

[Inject]
public IOrderRepository OrderRepository { get; set; }
[Inject]
public ICustomerRepository CustomerRepository { get; set; }
有没有办法使用 .NET Core 上的内置 DI 来实现相同的功能?另外,是否可以使用基于约定的绑定(bind)?

最佳答案

不,内置的 DI/IoC 容器在使用和功能上都特意保持简单,以便为其他 DI 容器插件提供基础。

所以没有内置支持:自动发现、自动注册、装饰器或注入(inject)器,或基于约定的注册。据我所知,目前还没有计划将其添加到内置容器中。

您必须使用支持属性注入(inject)的第三方容器。

请注意,属性注入(inject)在 98% 的情况下都被认为是不好的,因为它隐藏了依赖关系,并且不能保证在创建类时会注入(inject)对象。

使用构造函数注入(inject),您可以通过构造函数强制执行此操作并检查 null 并且不创建类的实例。使用属性注入(inject)这是不可能的,并且在单元测试期间,当未在构造函数中定义类需要哪些服务/依赖项时,它们并不明显,因此很容易错过并获得 NullReferenceExceptions .

我发现进行属性注入(inject)的唯一正当理由是将服务注入(inject)到由第三方库生成的代理类中,即从您无法控制对象创建的接口(interface)创建的 WCF 代理。即使在那里,它也仅适用于第三方库。如果您自己生成 WCF 代理,您可以通过 partial class 轻松扩展代理类并添加一个新的 DI 友好的构造函数、方法或属性。

避免它无处不在别的。

关于dependency-injection - ASP.NET Core 中的属性注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38459625/

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