1、MVc 实现依赖注入


public class WindsorControllerFactory : DefaultControllerFactory { private readonly IKernel _kernel; public WindsorControllerFactory(IKernel kernel) { _kernel = kernel; } protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, System.Type controllerType) { if (controllerType == null) { throw new HttpException(404, string.Format("当前对{0}的请求不存在", requestContext.HttpContext.Request.Path)); } return (IController)_kernel.Resolve(controllerType); } public override void ReleaseController(IController controller) { _kernel.ReleaseComponent(controller); base.ReleaseController(controller); }
}


 public class ControllerInstaller : IWindsorInstaller
    {

        public void Install(Castle.Windsor.IWindsorContainer container, Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore store)
        {

            container.Register(Classes.FromThisAssembly() //在哪里找寻接口或类

               .BasedOn<IController>() //实现IController接口

               .If(Component.IsInSameNamespaceAs<HomeController>()) //与HomeController在同一个命名空间

               .If(t => t.Name.EndsWith("Controller")) //以"Controller"结尾

               .Configure(c => c.LifestylePerWebRequest()));//每次请求创建一个Controller实例



            container.Register(
             Component.For<IUserDal>().ImplementedBy<UserDal>().LifestylePerWebRequest());

        }

    }

Global.asax 文件进行注册

 

  public class MvcApplication : System.Web.HttpApplication
    {

        private IWindsorContainer _container;
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);

            //初始化一个IOC容器
            _container = new WindsorContainer().Install(FromAssembly.This());

            //完成IWindsorInstaller接口中的注册
            ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(_container.Kernel));

        }

        protected void Application_End()
        {
            _container.Dispose();

        }


       

    }

 


2、web api 依赖注入实现
一、创建 WindsorActivator 继承 IHttpControllerActivator
 
public class WindsorCompositionRoot : IHttpControllerActivator
    {
        private readonly IWindsorContainer _container;

        public WindsorCompositionRoot(IWindsorContainer container)
        {
            _container = container;
        }

        public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
        {
            var controller = (IHttpController)_container.Resolve(controllerType);

            request.RegisterForDispose(
                new Release(() => _container.Release(controller)));

            return controller;
        }
        private sealed class Release : IDisposable
        {
            private readonly Action _release;

            public Release(Action release)
            {
                _release = release;
            }

            public void Dispose()
            {
                _release();
            }
        }
}

 public class RepositoriesInstaller : IWindsorInstaller
    {
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            container.Register(
                Component.For<ITitemService>().ImplementedBy<TitemService>().LifestylePerWebRequest());
            
        }

    }


Global.asax 文件注册

 public class WebApiApplication : System.Web.HttpApplication
    {
        private static IWindsorContainer _container;
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            //api 初始化
            ConfigureWindsor(GlobalConfiguration.Configuration);
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

         
        }


        public static void ConfigureWindsor(HttpConfiguration configuration)
        {
            _container = new WindsorContainer();
            _container.Install(FromAssembly.This());
            _container.Kernel.Resolver.AddSubResolver(new CollectionResolver(_container.Kernel, true));
             RegisterControllerActivator(_container);
}
}
      private static void RegisterControllerActivator(IWindsorContainer container)
        {
            GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator),
                new WindsorCompositionRoot(container));
        }

 



}

 

 

 




 








 

posted @ 2016-09-29 18:16 JIM.WEN 阅读(923) 评论(0) 推荐(0)
摘要: ASP.NET Web API路由,简单来说,就是把客户端请求映射到对应的Action上的过程。在"ASP.NET Web API实践系列03,路由模版, 路由惯例, 路由设置"一文中,体验了通过模版、惯例、HTTP方法来设置路由,这种做法的好处是把路由模版统一放在了App_Start文件夹下的WebApiConfig类中,方便管理,但缺点是不够灵活。 REST把一切都看成资源,有时候,... 阅读全文
posted @ 2016-07-28 09:51 JIM.WEN 阅读(17110) 评论(0) 推荐(0)
摘要: IF OBJECT_ID('Fn_GetQuanPin','Fn') IS NOT NULL DROP FUNCTION fn_GetQuanPin go create function [dbo].[fn_GetQuanPin](@str varchar(100)) returns varchar(8000) as begin declare @re varchar(8000),@crs... 阅读全文
posted @ 2016-07-14 09:53 JIM.WEN 阅读(702) 评论(0) 推荐(1)
摘要: 下面为您介绍sql下用了判断各种资源是否存在的代码,需要的朋友可以参考下,希望对您学习sql的函数及数据库能够有所帮助。 库是否存在 if exists(select * from master..sysdatabases where name=N'库名') print 'exists' else ... 阅读全文
posted @ 2014-12-04 17:43 JIM.WEN 阅读(152) 评论(0) 推荐(0)
摘要: web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Application_Start()方法中添加一句:。 代码如下:GlobalConfiguration.C... 阅读全文
posted @ 2014-12-03 17:27 JIM.WEN 阅读(1563) 评论(0) 推荐(0)
摘要: C#格式化数值结果表字符说明示例输出C货币string.Format("{0:C3}", 2)$2.000D十进制string.Format("{0:D3}", 2)002E科学计数法1.20E+0011.20E+001G常规string.Format("{0:G}", 2)2N用分号隔开的数字st... 阅读全文
posted @ 2014-07-10 09:54 JIM.WEN 阅读(195) 评论(0) 推荐(0)
摘要: 用URLRewriter控件①:首先要有这个文件URLRewriter.dll,如果没有,赶快到网上下载一个,并将其放到下面的bin目录里面,并且将其引用添加到下面里面; ②:下面就是Web.Config文件的配置了,当然,配置过程相当简单: 1:先添加这个 ~/(.[0-9]*)\.h... 阅读全文
posted @ 2014-06-27 10:01 JIM.WEN 阅读(302) 评论(0) 推荐(0)
点击右上角即可分享
微信分享提示