Unity Application Block 學習筆記 之 在VS2012中 配置文件 自動感應

在利用IUnityContainer容器進行類型注入可以使用兩種方式,一是RegisterType方式進行運行時注入,另一種方式就是使用配置文件進行注入。

但是在VS2012默認環境下,不會在編輯配置文件時自動感應,但是VS2010中相反卻可以。苦思好久之後,想到一個辦法,直接將xsd--xml架構文件從VS2010中拷貝到VS2012中試試效果,結果一試,ok!

具體操作如下:將UnityConfiguration20.xsd文件從E:\Program Files\Microsoft Visual Studio 10.0\Xml\Schemas拷貝到E:\Program Files\Microsoft Visual Studio 11.0\Xml\Schemas(VS2012的安裝路徑,我的是放在E盤)
 
 如果你沒有安裝過VS2012,可直接將下面內容保存爲UnityConfiguration20.xsd文件
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="http://schemas.microsoft.com/practices/2010/unity"
           targetNamespace="http://schemas.microsoft.com/practices/2010/unity"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">

  <!-- Core unity config -->

  <xs:element name="unity" type="UnityConfigurationSection" />

  <xs:complexType name="UnityConfigurationSection">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="container" type="ContainerElement"/>
        <xs:element name="alias" type="AliasElement" />
        <xs:element name="sectionExtension" type="SectionExtensionElement" />
        <xs:element name="namespace" type="NamedElement" />
        <xs:element name="assembly" type="NamedElement" />
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Containers">
    <xs:sequence>
      <xs:element name="container" minOccurs="0" maxOccurs="unbounded" type="ContainerElement"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ContainerElement">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="instance" type="InstanceElement"/>
        <xs:element name="register" type="RegisterElement"/>
        <xs:element name="extension" type="ContainerExtensionElement"/>
        <xs:element name="interception" type="InterceptionElement"/>
        <xs:element name="interceptors" type="InterceptorsElement"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute name="name" type="IdentifierName_Type"/>
  </xs:complexType>

  <xs:complexType name="InstanceElement">
    <xs:attribute name="name" type="IdentifierName_Type"/>
    <xs:attribute name="type" type="TypeName_Type"/>
    <xs:attribute name="value" type="LiteralValue_Type"/>
    <xs:attribute name="typeConverter" type="TypeName_Type"/>
  </xs:complexType>

  <xs:complexType name="ContainerExtensionElement">
    <xs:attribute name="type" type="ContainerExtensionTypeName_Type" use="required"/>
  </xs:complexType>

  <xs:complexType name="RegisterElement">
    <xs:group ref="InjectionGroup"/>
    <xs:attribute name="type" type="TypeName_Type" use="required" />
    <xs:attribute name="name" type="IdentifierName_Type" />
    <xs:attribute name="mapTo" type="TypeName_Type"/>
  </xs:complexType>

  <xs:complexType name="LifetimeElement">
    <xs:attribute name="type" type="LifetimeTypeName_Type" use="required"/>
    <xs:attribute name="value" type="LiteralValue_Type"/>
    <xs:attribute name="typeConverter" type="TypeName_Type"/>
  </xs:complexType>

  <xs:complexType name="ConstructorElement">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="param" type="ParameterElement"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="MethodElement">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="param" type="ParameterElement"/>
    </xs:sequence>
    <xs:attribute name="name" type="IdentifierName_Type" use="required"/>
  </xs:complexType>

  <xs:complexType name="PropertyElement">
    <xs:group ref="ValueResolutionGroup" minOccurs="0"/>
    <xs:attribute name="name" type="IdentifierName_Type" use="required"/>
    <xs:attributeGroup ref="ValueOptimizationAttributes"/>
  </xs:complexType>

  <xs:complexType name="ParameterElement">
    <xs:group ref="ValueResolutionGroup" minOccurs="0"/>
    <xs:attribute name="name" type="IdentifierName_Type"/>
    <xs:attribute name="type" type="TypeName_Type"/>
    <xs:attributeGroup ref="ValueOptimizationAttributes"/>
  </xs:complexType>

  <xs:complexType name="DependencyElement">
    <xs:attribute name="name" type="IdentifierName_Type"/>
    <xs:attribute name="type" type="TypeName_Type"/>
  </xs:complexType>

  <xs:complexType name="ValueElement">
    <xs:attribute name="value" type="LiteralValue_Type"/>
    <xs:attribute name="typeConverter" type="TypeName_Type"/>
  </xs:complexType>

  <xs:complexType name="ArrayElement">
    <xs:group ref="ValueResolutionGroup" minOccurs="0" maxOccurs="unbounded"/>
    <xs:attribute name="type" type="TypeName_Type"/>
  </xs:complexType>

  <xs:complexType name="OptionalElement">
    <xs:attribute name="name" type="IdentifierName_Type"/>
    <xs:attribute name="type" type="TypeName_Type"/>
  </xs:complexType>


  <xs:complexType name="AliasElement">
    <xs:attribute name="alias" type="IdentifierName_Type" use="required"/>
    <xs:attribute name="type" type="TypeName_Type" use="required"/>
  </xs:complexType>


  <xs:complexType name="SectionExtensionElement">
    <xs:attribute name="prefix" type="IdentifierName_Type"/>
    <xs:attribute name="type" type="SectionExtensionTypeName_Type" use="required"/>
  </xs:complexType>


  <xs:attributeGroup name="ValueOptimizationAttributes">
    <xs:attribute name="value" type="LiteralValue_Type"/>
    <xs:attribute name="dependencyName" type="IdentifierName_Type"/>
    <xs:attribute name="dependencyType" type="TypeName_Type"/>
  </xs:attributeGroup>

  <xs:group name="ValueResolutionGroup">
    <xs:choice>
      <xs:element name="value" type="ValueElement"/>
      <xs:element name="dependency" type="DependencyElement"/>
      <xs:element name="array" type="ArrayElement"/>
      <xs:element name="optional" type="OptionalElement"/>
    </xs:choice>
  </xs:group>

  <xs:group name="InjectionGroup">
    <xs:sequence>
      <xs:element minOccurs="0" name="lifetime" type="LifetimeElement"/>
      <xs:element minOccurs="0" name="constructor" type="ConstructorElement"/>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="method" type="MethodElement"/>
        <xs:element name="property" type="PropertyElement"/>
        <xs:element name="interceptor" type="InterceptorElement"/>
        <xs:element name="interceptionBehavior" type="InterceptionBehaviorElement"/>
        <xs:element name="addInterface" type="AddInterfaceElement"/>
        <xs:element name="policyInjection" type="PolicyInjectionElement"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>

  <!-- Interception config -->

  <xs:complexType name="InterceptionElement">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="policy" type="PolicyElement"/>
    </xs:choice>
  </xs:complexType>

  <xs:complexType name="PolicyElement">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="callHandler" type="CallHandlerElement"/>
      <xs:element name="matchingRule" type="MatchingRuleElement"/>
    </xs:choice>
    <xs:attribute name="name" type="IdentifierName_Type" use="required"/>
  </xs:complexType>

  <xs:complexType name="CallHandlerElement">
    <xs:group ref="InjectionGroup"/>
    <xs:attribute name="type" type="TypeName_Type"/>
    <xs:attribute name="name" type="IdentifierName_Type" use="required"/>
  </xs:complexType>

  <xs:complexType name="MatchingRuleElement">
    <xs:group ref="InjectionGroup"/>
    <xs:attribute name="type" type="MatchingRuleTypeName_Type"/>
    <xs:attribute name="name" type="IdentifierName_Type" use="required"/>
  </xs:complexType>

  <xs:complexType name="InterceptorElement">
    <xs:attribute name="name" type="IdentifierName_Type"/>
    <xs:attribute name="type" type="InterceptorTypeName_Type"/>
    <xs:attribute name="isDefaultForType" type="boolean_Type2"/>
  </xs:complexType>

  <xs:complexType name="InterceptionBehaviorElement">
    <xs:attribute name="name" type="IdentifierName_Type"/>
    <xs:attribute name="type" type="TypeName_Type"/>
    <xs:attribute name="isDefaultForType" type="boolean_Type2"/>
  </xs:complexType>

  <xs:complexType name="AddInterfaceElement">
    <xs:attribute name="type" type="TypeName_Type" use="required"/>
  </xs:complexType>

  <xs:complexType name="PolicyInjectionElement"/>

  <xs:complexType name="InterceptorsElement">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="interceptor" type="InterceptorsInterceptorElement"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="InterceptorsInterceptorElement">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="key" type="KeyElement"/>
      <xs:element name="default" type="DefaultElement"/>
    </xs:choice>
    <xs:attribute name="type" type="InterceptorTypeName_Type"/>
    <xs:attribute name="value" type="LiteralValue_Type"/>
    <xs:attribute name="typeConverter" type="TypeName_Type"/>
  </xs:complexType>

  <xs:complexType name="KeyElement">
    <xs:attribute name="type" type="TypeName_Type" use="required"/>
    <xs:attribute name="name" type="IdentifierName_Type"/>
  </xs:complexType>

  <xs:complexType name="DefaultElement">
    <xs:attribute name="type" type="TypeName_Type" use="required"/>
  </xs:complexType>

  <!-- common types -->

  <xs:simpleType name="LiteralValue_Type">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>

  <xs:simpleType name="TypeName_Type">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>

  <xs:simpleType name="LifetimeTypeName_Type">
    <xs:union memberTypes="TypeName_Type">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="singleton"/>
          <xs:enumeration value="transient"/>
          <xs:enumeration value="perthread"/>
          <xs:enumeration value="external"/>
          <xs:enumeration value="hierarchical"/>
          <xs:enumeration value="resolve"/>
          <xs:enumeration value="perresolve"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:union>
  </xs:simpleType>

  <xs:simpleType name="ContainerExtensionTypeName_Type">
    <xs:union memberTypes="TypeName_Type">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Interception"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:union>
  </xs:simpleType>

  <xs:simpleType name="SectionExtensionTypeName_Type">
    <xs:union memberTypes="TypeName_Type">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Microsoft.Practices.Unity.Interception.Configuration"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:union>
  </xs:simpleType>

  <xs:simpleType name="InterceptorTypeName_Type">
    <xs:union memberTypes="TypeName_Type">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="VirtualMethodInterceptor"/>
          <xs:enumeration value="InterfaceInterceptor"/>
          <xs:enumeration value="TransparentProxyInterceptor"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:union>
  </xs:simpleType>

  <xs:simpleType name="MatchingRuleTypeName_Type">
    <xs:union memberTypes="TypeName_Type">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="AssemblyMatchingRule"/>
          <xs:enumeration value="CustomAttributeMatchingRule"/>
          <xs:enumeration value="MemberNameMatchingRule"/>
          <xs:enumeration value="NamespaceMatchingRule"/>
          <xs:enumeration value="ParameterTypeMatchingRule"/>
          <xs:enumeration value="PropertyMatchingRule"/>
          <xs:enumeration value="TagAttributeMatchingRule"/>
          <xs:enumeration value="TypeMatchingRule"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:union>
  </xs:simpleType>

  <xs:simpleType name="IdentifierName_Type">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>

  <xs:simpleType name="boolean_Type2">
    <xs:restriction base="xs:boolean">
      <xs:pattern value="true" />
      <xs:pattern value="false" />
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="Empty"/>

  <xs:complexType name="NamedElement">
    <xs:attribute name="name" type="IdentifierName_Type" use="required"/>
  </xs:complexType>

</xs:schema>



發佈了23 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章