加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

依赖注入 – 在ASP.NET中使用Unity.WebForms

发布时间:2020-12-14 00:51:30 所属栏目:百科 来源:网络整理
导读:我正在尝试在webforms项目中实现DI,所以我在UI层中安装了Unity.WebForms dll.我做了一个App_Start文件夹就是用UnityWebFormsStart类文件为我创建的.在这个文件里面有一个RegisterDependencies方法,它要求编辑. 注册依赖项后的下一步是什么?我需要在Global.a
我正在尝试在webforms项目中实现DI,所以我在UI层中安装了Unity.WebForms dll.我做了一个App_Start文件夹就是用UnityWebFormsStart类文件为我创建的.在这个文件里面有一个RegisterDependencies方法,它要求编辑.

注册依赖项后的下一步是什么?我需要在Global.asax类文件中添加一些内容吗?我如何以及在何处解决网络表单中的类型?我用任何属性装饰它吗?

Unity.WebForms dll和NuGet包在后台为您做了一些事情.它将确保在每个新Web请求开始时启动子容器,并在每个请求结束时处置.这允许您使用“每个Web请求”生活方式(使用Unity中的HierarchicalLifetimeManager)注册组件,这对于诸如实体框架的DbContext等O / RM工作单元之类的组件非常有用.

包确保的另一件事是给定的HttpHandler(通常是你的Page)及其所有子控件都是Built up.BuildUp方法是初始化不是由容器本身创建的组件的方法.

因此,我们的想法是在页面类和控件中使用属性注入,但仅在应用程序的所有其他组件中使用构造函数注入.构造函数注入是执行依赖项注入的首选机制,但遗憾的是构造函数注入在ASP.NET页面和控件类中是不可能的.

所以你的页面看起来像这样:

public class CancelOrderPage : Page
{
    [Dependency]
    public ICommandHandler<CancelOrder> CancelOrderHandler { get; set; }

    void CancelButton_Click(object sender,EventArgs e) {
        this.CancelOrderHandler.Handle(new CancelOrder {
            OrderId = Guid.Parse(this.OrderIdHiddenField.Value)
        });
    }
}

对于应用程序的其余部分,请使用构造函数注入:

public class CancelOrderHandler : ICommandHandler<CancelOrder>
{
    private readonly IAuthorizedRepository<Order> orderRepository;
    private readonly IEventPublisher eventPublisher;

    public CancelOrderHandler(IAuthorizedRepository<Order> orderRepository,IEventPublisher eventPublisher) {
        this.orderRepository = orderRepository;
        this.eventPublisher = eventPublisher;
    }

    public void Handle(CancelOrder command) {
        // some implementation
    }
}

在RegisterDependencies中,您必须注册依赖项.您可以手动执行此操作:

container.RegisterType<ICommandHandler<CancelOrder>,CancelOrderHandler>();
container.RegisterType<IEventPublisher,InProcessPublisher>();
container.RegisterType(
    typeof(AuthorizedRepository<>),typeof(DbContextRepo<>));

或者你可以使用batch-registration.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读