• Castle实践7-BatchRegistration Facility


            BatchRegistration Facility是一个辅助Castle IOC容器配置的扩张单元。我们使用他可以很方便在容器中加载Component和Facility,你可以把单独的Component或者Facility编译成dll,然后通过配置文件用BatchRegistration Facility“一次性”或者“筛选”后加入到容器中而无需硬编码AddComponent和AddFacility,灵活性是很高的~
     
    1)加载程序集中所有定义了Castle.Model.CastleComponentAttribute 的组件

    <facility id="batchregistration">
       
    <assemblyBatch name="MyAssembly" useAttributes="true" />
    </facility>


    2)除Component1不会加载,其他定义了CastleComponentAttribute都会被加载

    <facility id="batchregistration">
        <
    assemblyBatch name="MyAssembly" useAttributes="true">
           
    <exclude type="MyAssembly.Component1" />
        </assemblyBatch>
    </facility>


    3)只加载Component2

    <facility id="batchregistration">
        
    <assemblyBatch name="MyAssembly" useAttributes="false">
            
    <include key="other" component="MyAssembly.Component2" />
        
    </assemblyBatch>
    </facility>


    4)加载Faclity

    <facility id="batchregistration">
        
    <addFacility id="facility1" type="MyAssembly.Facility1, MyAssembly" />
        
    <addFacility id="facility2" type="MyAssembly.Facility2, MyAssembly" />
    </facility>

            其实这个Facility做的就是根据配置扫描程序集然后动态加载到容器里面,虽然很简单却很灵活。比如你想更改一个component的行为,你只需要替换掉这个component的dll就行了,其他部分无需重新编译。

    【使用方法】
    1)建立这个Facility的配置

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        
    <facilities>
            
    <facility id="batchregistration">
                
    <assemblyBatch name="MyAssembly" useAttributes="true" />
            
    </facility>
        
    </facilities>
    </configuration>


    2)声明组件的class并把他编辑成配置文件里面MyAssembly.dll.

    [CastleComponent("comp1")]
    public class Component1
    {
        
    public Component1()
        {
        }
    }

    [CastleComponent(
    "comp2")]
    public class Component2
    {
        
    public Component2()
        {
        }
    }


    3)使用Facility,这样Component1和Component2就自动被加载了。

    IWindsorContainer container = new WindsorContainer("../../CastleConfig.xml"); 
    container.AddFacility( 
    "batchregistration"new BatchRegistrationFacility() );

  • 相关阅读:
    计算机编程的24条法则
    爱的十个秘密10.热情的力量
    爱的十个秘密9.承诺的力量
    CPU信息的获得(转自大富翁)
    从编程员的角度理解 NTFS 2000:流和硬链接
    爱的十个秘密8.沟通的力量
    Delphi面向对象编程的20条规则(转自太平洋电脑网)
    程序读取计算机设备管理器中各设备的状态(启用/禁用)?(转自大富翁)
    关于NTFS文件系统中的数据流问题
    Windows新版算号器技术原理
  • 原文地址:https://www.cnblogs.com/wj/p/192133.html
Copyright © 2020-2023  润新知