以下是通过(IOC框架)Unity方式实现简单的依赖注入
1.定义公共接口
interface IBook
{
string GetName();
}
2.创建两个类,继承自接口 IBook
class BookA : IBook
{
private string param;
//带参构造函数
public BookA(string param)
{
this.param = param;
}
public string GetName()
{
return this.param;
}
}
class BookB : IBook
{
public string GetName()
{
return "This BookB";
}
}
3.通过配置文件注册容器及指定主函数需要创建那个类(BookA/BookB)的对象
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="myunity"
type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<myunity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<!--容器名称-->
<container name="mycontainer">
<!--BookA主要是为了展示带参构造调用方式 如果BookA提供的是无参的构造函数 直接修改一下配置项就能创建不同的对象-->
<register type="ConsoleApplication17.IBook,ConsoleApplication17" mapTo="ConsoleApplication17.BookA,ConsoleApplication17"/>
<!--<register type="ConsoleApplication17.IBook,ConsoleApplication17" mapTo="ConsoleApplication17.BookB,ConsoleApplication17"/>-->
</container>
</myunity>
</configuration>
4.主函数中调用
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Unity;
namespace ConsoleApplication17
{
class Program
{
static void Main(string[] args)
{
string obj;
using (Microsoft.Practices.Unity.IUnityContainer container = new UnityContainer())
{
//不通过配置文件调用的方式
//unity.RegisterType<IBook, BookA>();
//unity.RegisterType<IBook, BookA>();
//IBook book =unity.Resolve<IBook>();
//obj = book.GetName();
UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("myunity");
//以下两行作用相同
container.LoadConfiguration(section, "mycontainer");
//section.Configure(container, "mycontainer");
var list = new ParameterOverrides();
list.Add("param", "踏浪帅2");
//带参构造函数调用
IBook book = container.Resolve<IBook>(list);
//无参构造函数调用
//IBook book = container.Resolve<IBook>();
obj = book.GetName();
}
Console.WriteLine(obj);
Console.ReadKey();
}
}
}