Castle windsor快速入门

1.创建MVC项目,安装Castle Windsor

2.创建CastleWindsor文件夹

    在ASP.NET MVC中,每次请求,DefaultControllerFactory都会为我们创建controller实例,我们需要自定义一个派生自DefaultControllerFactory的类,让Castle Windsor帮我们生成controller实例。创建WindsorControllerFactory类,并集成子DeafaultControllerFactory

namespace CastleApp.CastleWindsor
{
    public class WindsorControllerFactory : DefaultControllerFactory
    {
        private readonly IKernel _ikernel;
        public WindsorControllerFactory(IKernel ikernel)
        {
            _ikernel = ikernel;
        }
        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            if (controllerType == null)
            {
                throw new HttpException(404, string.Format("当前对{0}的请求不存在", requestContext.HttpContext.Request.Path));
            }
            return (IController)_ikernel.Resolve(controllerType);
        }
        public override void ReleaseController(IController controller)
        {
            _ikernel.ReleaseComponent(controller);
            base.ReleaseController(controller);
        }
    }
}
3.在global.asax中:生成Castle Windsor实例,赋值给自定义ControllerFactory的构造函数,并在Application结束时销毁该Castle Windsor实例。

public class MvcApplication : System.Web.HttpApplication
    {
        public static IWindsorContainer _container;
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);

            MvcApplication.BootstrapContainer();
        }
        private static void BootstrapContainer()
        {
            _container = new WindsorContainer();
            _container.Install(FromAssembly.This());
            ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(_container.Kernel));
        }
        protected void Application_End()
        {
            _container.Dispose();
        }
    }
4.需要告诉Castle Windsor在何种条件下,以怎样的方式注册依赖。Castle Windsor提供了IWindsorInstaller接口。在CastleWindsor文件夹下创建实现该接口的类。
namespace CastleApp.CastleWindsor
{
    public class ControllerInstaller : IWindsorInstaller
    {
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            container.Register(Classes.FromThisAssembly() //在哪里找寻接口或类
                .BasedOn<IController>() //实现IController接口
                .Configure(c => c.LifestylePerWebRequest()));//每次请求创建一个Controller实例

            container.Register(Component.For<IContactManager>().ImplementedBy<ContactManager>());
        }
    }
}
5.创建接口,创建controller

public class AboutController : Controller
    {
        private IContactManager contactManager;
        public AboutController(IContactManager contactManager)
        {
            this.contactManager = contactManager;
        }
        public ActionResult Index()
        {
            
            ViewBag.name= contactManager.ShowName("123");
            return View();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值