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