文档章节

依赖注入容器 Castle windsor的使用

刘明欢
 刘明欢
发布于 2014/03/30 23:26
字数 399
阅读 5175
收藏 4

       在Castle中包含了一组开发框架,它里面的IOC容器是Windsor。在Windsor中提出了自动装配的概念,由容器来自动管理组件之间的依赖关系,无需用户去编写XML配置文件或者通过Attribute来指定容器之间的依赖关系。这样在使用上非常的简单,同时也带了一些问题,作为开发人员的我们无法控制组件的依赖关系。

       简单使用:

              1.添加Castle.Core.dll,Castle.Windsor两个引用。

              2.创建被用于注入的接口和其实现。

              3.在程序的入口处(winform在Main函数下,Web Application在Application_start()下)添加如下代码

            IWindsorContainer container = new WindsorContainer();
            
            //下面为你要注册的组件,即注入容器的配置。
            
            //“WindowsFormsApplication1” 为程序集名称,Form为要注册类的基类
            container.Register(AllTypes.FromAssemblyNamed("WindowsFormsApplication1")
                                       .BasedOn<Form>().WithService.DefaultInterfaces());
                                       
            //“Tasks”为你的程序集名称,“Service”为你的“IService”接口的实现类
            container.Register(AllTypes.FromAssemblyNamed("Tasks").Pick()
                                       .If(t => t.Name.EndsWith("Service"))
                                       .WithService.DefaultInterfaces());

             4.在调用出实现注入,并调用。

                    1)属性/Setter注入:               

        public ITestService TestService { get; set; }
        
        TestService.GetMethod();//调用TestService中的GetMethod()方法

                    2)构造器注入:

    public partial class Form1 : Form
    {
        private ITestService _service;

        public Form1(ITestService testService)
        {
            InitializeComponent();

            _service = testService;
            _service.GetMethod();//调用TestService中的GetMethod()方法
        }
    }


© 著作权归作者所有

刘明欢
粉丝 3
博文 3
码字总数 949
作品 3
成都
私信 提问
加载中

评论(9)

刘明欢
刘明欢 博主

引用来自“aweifly”的评论

你好,看下面代码,打开窗口需要new frmMenu,但依赖注入是用构造方法的,好像不可以这样做吧
frmMenu frm = new frmMenu();

private readonly IServices.IMenuService MenuService;

public frmMenu(IServices.IMenuService MenuService)
{
this.MenuService = MenuService;
InitializeComponent();
}
依赖注入是不需要new的
aweifly
aweifly
你好,看下面代码,打开窗口需要new frmMenu,但依赖注入是用构造方法的,好像不可以这样做吧
frmMenu frm = new frmMenu();

private readonly IServices.IMenuService MenuService;

public frmMenu(IServices.IMenuService MenuService)
{
this.MenuService = MenuService;
InitializeComponent();
}
刘明欢
刘明欢 博主

引用来自“Pete_Jones”的评论

引用来自“刘明欢”的评论

引用来自“Pete_Jones”的评论

Form1 如何被实例化? 自己New Form1的话,Castle肯定不会给注入吧? 哪如何实例化呢?

依赖注入后是不需要实例化的,你要注入的东西需要在register中配置
楼主,有没有源码Demo小样儿,发一下看看啊! 谢谢啦 我的邮箱:pete_jones@163.com

码云上好像有我的demo,改天共享出来
Pete_Jones
Pete_Jones

引用来自“刘明欢”的评论

引用来自“Pete_Jones”的评论

Form1 如何被实例化? 自己New Form1的话,Castle肯定不会给注入吧? 哪如何实例化呢?

依赖注入后是不需要实例化的,你要注入的东西需要在register中配置
楼主,有没有源码Demo小样儿,发一下看看啊! 谢谢啦 我的邮箱:pete_jones@163.com
刘明欢
刘明欢 博主

引用来自“Pete_Jones”的评论

Form1 如何被实例化? 自己New Form1的话,Castle肯定不会给注入吧? 哪如何实例化呢?

依赖注入后是不需要实例化的,你要注入的东西需要在register中配置
Pete_Jones
Pete_Jones
关键地方,没有贴出来
Pete_Jones
Pete_Jones
Form1 如何被实例化? 自己New Form1的话,Castle肯定不会给注入吧? 哪如何实例化呢?
刘明欢
刘明欢 博主

引用来自“mrxiexie”的评论

Form1 怎么初始化的?
你说的是指什么地方?
mrxiexie
mrxiexie
Form1 怎么初始化的?
Castle IOC容器快速入门

摘要:IOC模式是近年来非常流行的一种模式,相信大家都不陌生了,如果你还不是很熟悉的话,可以看看Martin Fowler大师的文章[url]http://martinfowler.com/articles/injection.html[/url],网...

技术小甜
2017/11/16
0
0
使用 DryIoc 替换 Abp 的 DI 框架

一、背景 你说我 Castle Windsor 库用得好好的,为啥要大费周章的替换成 DryIoc 库呢?那就是性能,DryIoc 是一款优秀而且轻量级的 DI 框架,整个项目代码就两个文件,加起来代码 1 万行左右...

myzony
2018/11/20
0
0
Windows服务使用Windsor容器

该文章是系列文章 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业 的其中一篇。 Windsor是ABP框架自带的IOC容器。 关于什么是IOC,你可以Bing或者Google一下,英文不错的话推荐看...

repeatedly
05/24
0
0
ABP架构学习系列二:ABP中配置的注册和初始化

一、手工搭建平台 1.创建项目 创建MVC5项目,手动引入Abp、Abp.Web、Abp.Web.Mvc、Abp.Web.Api 使用nuget添加Newtonsoft.Json、Castle.Core、Castle.Windsor Install-Package Newtonsoft.Jso...

蚊子888
2017/12/01
0
0
AutoMocking 容器

我非常幸运能跟几个聪明的小伙儿们一起工作(让我伤感的是他们中有几个人比我年轻很多,这使我找不到存在感,但是好的一面是,我总能够学到新东西)。 前一天我就学到了一个新玩意儿,工作时一...

oschina
2014/03/04
453
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 —— 要步入《攻壳机动队》的世界了么?

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @ nnnm:说到音乐,这段一直是纯音乐在循环。每次听到久石让的Summer时心上都会莫名的感觉着轻松。《菊次郞的夏天》竟然是北野武的片子,没有...

小小编辑
24分钟前
41
3
C++ STL set::find的用法

参考: http://blog.csdn.net/lihao21/article/details/6302196 /* class for function predicate * - operator() returns whether a person is less than another person */ c......

shzwork
33分钟前
1
0
抽象同步队列AQS——AbstractQueuedSynchronizer锁详解

AQS——锁的底层支持 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资...

须臾之余
今天
3
0
springboot配置百度UEditor 富文本详解

富文本简介 UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码... 准备工作 ueditor需要单独文...

wotrd
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部