Microsoft.Practices.Unity学习笔记

ClassLibrary1.dll

namespace ClassLibrary1
{
    public interface ILogger
    {
        void Write(string message);
    }   
}


ClassLibrary2.dll

 

namespace ClassLibrary2
{
    public class TextFileLogger : ClassLibrary1.ILogger
    {
        public void Write(string message)
        {
            Console.WriteLine("Writed:" + message);
        }
    }
}


调用dll

using Microsoft.Practices.Unity;
using ClassLibrary1;

namespace UnityTest
{
    class Program
    {
        static void Main(string[] args)
        {
            //IUnityContainer container = new UnityContainer();
            //container.RegisterType<ILogger, TextFileLogger>();
            //ILogger textFileLogger = container.Resolve<ILogger>();
            //textFileLogger.Write("111");

            //IUnityContainer container = new UnityContainer();
            //Type fromType = Type.GetType("ClassLibrary1.ILogger,ClassLibrary1");
            //Type toType = Type.GetType("ClassLibrary2.TextFileLogger,ClassLibrary2");
            Type fromType = typeof(Unity.ILogger);
            Type toType = typeof(Unity.TextFileLogger);
            //container.RegisterType(fromType, toType);
            //ILogger textFileLogger = container.Resolve(fromType) as ILogger;
            //textFileLogger.Write("111");

            Type fromType = Type.GetType("ClassLibrary1.ILogger,ClassLibrary1");
            Type toType = Type.GetType("ClassLibrary2.TextFileLogger,ClassLibrary2");
            Inject.RegisterType(fromType, toType);
            ILogger textFileLogger = Inject.GetResolve(fromType) as ILogger;
            textFileLogger.Write("111");
            Console.ReadLine();
        }
    }
    //可以放入ClassLibrary1类库中,以解除ClassLibrary2的耦合
    //与之前petshop范例中工厂模式的反身的使用相关,不过功能更强大(缓存、接口、生命周期、配置方式、Attribute方式等等)
    class Inject
    {
        private static IUnityContainer container = new UnityContainer();
        public static void RegisterType(Type fromType, Type toType)
        {
            container.RegisterType(fromType, toType);
        }
        public static void RegisterType<TFrom, TTo>() where TTo : TFrom
        {
            container.RegisterType<TFrom, TTo>();
        }
        public static TResult GetResolve<TResult>()
        {
              return container.Resolve<TResult>();
        }
        public static object GetResolve(Type fromType)
        {
              return container.Resolve(fromType);
        }
    }
}

 

 


http://www.cnblogs.com/jqbird/archive/2010/12/26/1917051.html 

http://www.cnblogs.com/ruinet/archive/2010/03/16/1686480.html

http://blog.csdn.net/nacl025/article/details/6237263

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值