Blazor DI在剃须刀和商务舱的工作方式不同.为什么



在我的Blazor服务器应用程序中,我可以很容易地实例化类,比如说,.rarzor部分中的DAL类:

@page "/"
@inject DAL.DALClass dal

并在我的@code{}作用域中使用它。

但是,如果我尝试在我的领域逻辑类(如(中实例化它

public class ServerDesktopDTO : DesktopDTO
    {
        [Inject]
        protected DAL.DALClass dal { get; set; }
...

dal始终为空。为什么它的工作方式不同?如何使用[inject]属性和DI容器将其注入到我的类中?

它的工作方式不同,因为组件是由渲染引擎而不是DI容器创建的
因此,为Blazor引入了InjectAttribute,渲染引擎在其创建的组件中查找InjectAttribute,并要求DI contrainer创建相应的依赖项。但它并没有查找所有具有InjectAttribute的类
在其他类中,如果使用默认的DI容器,则使用构造函数注入来提供依赖关系。其他DI容器,如Unity或Autfac,可以为每个属性或方法注入依赖项。

最新更新