Unity 笔记二

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace UnityTest
{
    using System.Diagnostics;
    using System.Windows.Forms;
    using Microsoft.Practices.Unity.Configuration;
    using Microsoft.Practices.Unity;
    using System.Configuration;

    public interface IMessage
    {
        DateTime Time { get; set; }
        string Text { get; set; }
        string ToString(string split);
    }
    public class MyMessage:IMessage
    {
        public DateTime Time { get; set; }
        public string Text { get; set; }
        public MyMessage(string text,DateTime time)
        {
            Text = text;
            Time = time;
        }
        public MyMessage(string text):this(text,DateTime.Now){}
       
        public string ToString(string split ="\t")
        {
            return Time.ToString() + split + Text +split+ GetHashCode();
        }
    }
    public interface ITrace
    {
        IMessage Message { get; set; }
        void Write(string message);
    }
    public class ConsoleTrace:ITrace
    {
        [Dependency]
        public IMessage Message { get; set; }
        public void Write(string message)
        {
            if (Message != null)
            {
                message = Message.ToString("\t");
            }
            Trace.WriteLine(message);
        }
    }
    public class FormTrace:ITrace
    {
        public IMessage Message { get; set; }
        public void Write(string message)
        {
            if (Message != null)
            {
                message = Message.ToString("\t");
            }
            Trace.WriteLine(message);
        }
    }
    public class Class1
    {
        public void test1()
        {
            IUnityContainer container = new UnityContainer();
            IUnityContainer childContainter = container.CreateChildContainer();

            ExeConfigurationFileMap map = new ExeConfigurationFileMap();
            map.ExeConfigFilename = "UnityTest.dll.config";
            System.Configuration.Configuration config
                = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
            UnityConfigurationSection section= (UnityConfigurationSection)config.GetSection("unity");
            var defultContainter =  config.AppSettings.Settings["DefultContainter"].Value;
            section.Configure(container, defultContainter);

            section.Configure(childContainter, "First");
            //container.LoadConfiguration("Fourth");
            //container.RegisterType<ITrace, CosoleTrace>(new ContainerControlledLifetimeManager());
            //container.RegisterType<ITrace, FormTrace>();

            var message = container.Resolve<IMessage>();
            Trace.WriteLine(message.ToString("\t"));

            message.Text = "1111";

            var trace = childContainter.Resolve<ITrace>();
            trace.Message = message;
            trace.Write("fdsfds");

            trace = childContainter.Resolve<ITrace>();
            //trace.Message = message;
            trace.Write("fdsfds");

            trace = childContainter.Resolve<ITrace>();
            trace.Write("fdsfds");

            //container.LoadConfiguration("Second");
            //trace = container.Resolve<ITrace>();
            //trace.Write("fdsfds");
        }
    }
}

 

 

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name ="unity" type ="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,
             Microsoft.Practices.Unity.Configuration"/>
  </configSections>
  <appSettings>
    <add key ="DefultContainter" value="ChildContainter"/>
  </appSettings>
  <unity xmlns ="http://schemas.microsoft.com/practices/2010/unity">
    <namespace  name="UnityTest"/>
    <assembly name="UnityTest"/>
    <container name="ChildContainter">
      <register type="IMessage" mapTo="MyMessage">
        <constructor>
          <param name="text" type="System.String" value="abc"/>
        </constructor>
      </register>
    </container>
    <container name="First">
      <register  type="ITrace" mapTo="ConsoleTrace">
        <lifetime type="singleton"/>
      </register>
    </container>
    <container name="Second">
      <register type="ITrace" mapTo="FormTrace">
        <lifetime type="singleton"/>
      </register>
    </container>
    <container name="Third">
      <register type="ITrace" mapTo="ConsoleTrace">
        <lifetime type="perresolve"/>
      </register>
    </container>
    <container name="Fourth">
      <register type="ITrace" mapTo="ConsoleTrace">
        <lifetime type="perthread"/>
      </register>
    </container>
  </unity>
</configuration>

 

 

 

posted on 2012-05-08 09:59  小指令  阅读(474)  评论(0编辑  收藏  举报

导航