代码之家  ›  专栏  ›  技术社区  ›  Matt Ruwe

Microsoft Unity-代码转换为xml

  •  3
  • Matt Ruwe  · 技术社区  · 16 年前

        using System;
        using Microsoft.Practices.Unity;
        using Microsoft.Practices.Unity.InterceptionExtension;
    
        namespace ConsoleApplication1
    
        {
    
        class Program
        {
    
            static void Main(string[] args)
            {
    
                IUnityContainer container = new UnityContainer();
                container.AddNewExtension<Interception>();
                container.RegisterType<ILogger, Logger>();
                container.Configure<Interception>().SetInterceptorFor<ILogger>(new InterfaceInterceptor());
    
                var logger = container.Resolve<ILogger>();
                logger.Write("World.");
                Console.ReadKey();
            }
    
        }
    
    
        public interface ILogger
        {
            [Test]
            void Write(string message);
        }
    
    
        public class Logger : ILogger
        {
            public void Write(string message)
            {
                Console.Write(message);
            }
    
        }
    
        public class TestAttribute : HandlerAttribute
        {
    
            public override ICallHandler CreateHandler(IUnityContainer container)
            {
                return new TestHandler();
            }
    
        }
    
        public class TestHandler : ICallHandler
        {
    
            public int Order { get; set; }
    
            public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
            {
                Console.Write("Hello, ");
                return getNext()(input, getNext);
            }
    
        }
    
    }
    

        IUnityContainer container = new UnityContainer();
        container.AddNewExtension<Interception>();
        container.RegisterType<ILogger, Logger>();
        container.Configure<Interception>().SetInterceptorFor<ILogger>(new InterfaceInterceptor());
    

    我会有这个:

            IUnityContainer container = new UnityContainer();
            UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
            section.Containers.Default.Configure(container);
    

    使用XML配置文件。

    3 回复  |  直到 16 年前
        1
  •  7
  •   Matt Ruwe    16 年前

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
      </configSections>
    
      <unity>
        <typeAliases>
          <typeAlias alias="ILogger" type="ConsoleApplication1.ILogger, ConsoleApplication1" />
          <typeAlias alias="Logger" type="ConsoleApplication1.Logger, ConsoleApplication1" />
          <typeAlias alias="TestAttribute" type="ConsoleApplication1.TestAttribute, ConsoleApplication1" />
          <typeAlias alias="TestHandler" type="ConsoleApplication1.TestHandler, ConsoleApplication1" />
          <typeAlias alias="interface" type="Microsoft.Practices.Unity.InterceptionExtension.InterfaceInterceptor, Microsoft.Practices.Unity.Interception, Version=1.2.0.0" />
        </typeAliases>
        <containers>
          <container name="ConfigureInterceptorForType">
            <extensions>
              <add type="Microsoft.Practices.Unity.InterceptionExtension.Interception, Microsoft.Practices.Unity.Interception" />
            </extensions>
            <extensionConfig>
              <add name="interception" type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationElement, Microsoft.Practices.Unity.Interception.Configuration">
                <interceptors>
                  <interceptor type="interface">
                    <key type="ILogger"/>
                  </interceptor>
                </interceptors>
              </add>
            </extensionConfig>
            <types>
              <type type="ILogger" mapTo="Logger" />
            </types>
          </container>
        </containers>
      </unity>
    </configuration>
    

    再次,C#代码:

    using System;
    using System.Configuration;
    using Microsoft.Practices.Unity;
    using Microsoft.Practices.Unity.Configuration;
    using Microsoft.Practices.Unity.InterceptionExtension;
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                //IUnityContainer container = new UnityContainer(); 
                //container.AddNewExtension<Interception>(); 
                //container.RegisterType<ILogger, Logger>(); 
                //container.Configure<Interception>().SetInterceptorFor<ILogger>(new InterfaceInterceptor()); 
    
                IUnityContainer container = new UnityContainer();
                UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
                section.Containers["ConfigureInterceptorForType"].Configure(container);
    
    
                var logger = container.Resolve<ILogger>(); 
                logger.Write("World."); 
                Console.ReadKey();
            }
        } 
    
        public interface ILogger
        {
            [Test]        
            void Write(string message);
        } 
    
        public class Logger : ILogger
        {
            public void Write(string message)
            {
                Console.Write(message);
            }
        } 
    
        public class TestAttribute : HandlerAttribute
        {
            public override ICallHandler CreateHandler(IUnityContainer container) 
            { 
                return new TestHandler(); 
            }
        } 
    
        public class TestHandler : ICallHandler
        {
            public int Order { get; set; } 
    
            public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
            {
                Console.Write("Hello, "); 
                return getNext()(input, getNext);
            }
        }
    }
    
        2
  •  0
  •   hpcd    15 年前