zoukankan      html  css  js  c++  java
  • CastleWindsor 使用说明

    1.引用DLL Castle.Core.dll  和Castle.Windsor.dll

    2. 引用命名空间

    using Castle.MicroKernel.Resolvers.SpecializedResolvers;
    using Castle.Windsor;
    using Castle.Windsor.Installer;
    using Castle.MicroKernel.Registration;

    3. 注册 和解析

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Castle.MicroKernel.Resolvers.SpecializedResolvers;
    using Castle.Windsor;
    using Castle.Windsor.Installer;
    using Castle.MicroKernel.Registration;
    namespace CastleWindsor
    {
       /// <summary>
        /// CastleWindsor  文档 https://github.com/castleproject/Windsor/blob/master/docs/registering-components-one-by-one.md
       /// </summary>
        class Program
        {
            static void Main(string[] args)
            {
                regic r = new regic();
                r.Init();
    
              
                Console.ReadLine();
               
            }
           
        }
    
        public class regic
        {
            public void Init()
            {
                IWindsorContainer container = new WindsorContainer();
                container.Install(
                  FromAssembly.This()
               );
                //下面为你要注册的组件,即注入容器的配置。
    
                //“WindowsFormsApplication1” 为程序集名称,Form为要注册类的基类
                // container.Register(AllTypes.FromAssemblyNamed("WindowsFormsApplication1")
                //.BasedOn<Form>().WithService.DefaultInterfaces());
    
                //  “Tasks”为你的程序集名称,“Service”为你的“IService”接口的实现类
                container.Register(Classes.FromAssemblyNamed("CastleWindsor").Pick()
                                           .If(t => t.Name.EndsWith("Article"))
                                           .WithService.DefaultInterfaces());
    
                ///相同后缀名 自动注册  如 IOrderService -> OrderService
                container.Register(Classes.FromAssemblyNamed("CastleWindsor").Pick()
                                          .If(t => t.Name.EndsWith("Service"))
                                          .WithService.DefaultInterfaces());
    
                ///单个注册方法1
               // container.Register(Component.For<IOrderService>().ImplementedBy<OrderService>());
    
                ///单个注册方法2 
               // container.Register(Component.For(typeof(IOrderService)).ImplementedBy(typeof(OrderService)));
          
                //根据父类接口注册
                container.Register(Classes.FromThisAssembly().BasedOn(typeof(IAnimal)).WithService.Base());
                //注册泛型
                container.Register(Component.For(typeof(IRepository<>)).ImplementedBy(typeof(Repository<>)));
                var ent=container.Resolve<IArticle>();
            Console.WriteLine(ent.GetList());
                   var o = container.Resolve<IOrderService>();
                   Console.WriteLine(o.GetListOrder());
    
                //根据父类注册
                   IAnimal p = container.Resolve<IAnimal>();
                   Console.WriteLine(p.GetNameNew());
                //泛型
    
                   IRepository<Animal> a = container.Resolve<IRepository<Animal>>(); //注意 Resolve的都是接口
                   Console.WriteLine( a.GetTypeNew());
                //以service 结尾的都会被注册  IService ->Service
                   Domain.ITaskService taskService = container.Resolve<Domain.ITaskService>();
                   Console.WriteLine(taskService.GetList());
    
                   new regic1().test(container);
    
                   ITestService itservice = container.Resolve<ITestService>();
                   itservice.say();
            }
    
        }
    
    
       
    
    
        public class regic1 {
    
            public void test(IWindsorContainer container)
            {
              //  container = new WindsorContainer();
    
                var reperson = container.Resolve<IRepository<Person>>();
                Console.WriteLine(reperson.GetTypeNew()+"this is test");
            }
            
        }
    
    
        public interface ITestService
        {
            void say();
        }
      
        public class TestService:ITestService
        {
            //会自动注入
            private IRepository<Animal> _repositoryAnimal;
    
            public TestService(IRepository<Animal> repositoryAnimal)
            { 
            _repositoryAnimal=repositoryAnimal;
            }
    
            public void say()
            {
    
                Console.WriteLine("aaaaaa"+_repositoryAnimal.GetTypeNew());
            }
        }
    
        public class TestReg
        {
            public void Init(IWindsorContainer container)
            { 
            
            }
        
        }
    }
    View Code
  • 相关阅读:
    xmlTextTextReaderNodeType来读取XML元素的类型
    [转]关于两个坐标点的距离的计算问题
    Incorrect decrement of the reference count of an object that is not owned at this point by the caller1
    让ipad时时显示内存剩余量
    【转】苹果开发者账号注册流程
    自定义百度地图气泡
    [转] iOS 常用数学函数
    [转]JDK环境变量的配置
    纬度在换算距离上一度等于多少公里?
    [转]UIDevice uniqueGlobalDeviceIdentifier(百度地图API的那些事)
  • 原文地址:https://www.cnblogs.com/tiancai/p/5381552.html
Copyright © 2011-2022 走看看