zoukankan      html  css  js  c++  java
  • 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() );

  • 相关阅读:
    [FJOI2016] 建筑师
    AtCoder
    [Poetize6] IncDec Sequence
    CodeForces
    洛谷 P4551 最长异或路径
    WC 2018/CTSC 2018/APIO 2018 游记
    洛谷 P4538 收集邮票
    「PKUWC 2018」随机算法 (60分部分分做法)
    bzoj 3718: [PA2014]Parking
    bzoj 1023: [SHOI2008]cactus仙人掌图 2125: 最短路 4728: 挪威的森林 静态仙人掌上路径长度的维护系列
  • 原文地址:https://www.cnblogs.com/wj/p/192133.html
Copyright © 2011-2022 走看看