您的位置:首页 > 移动开发 > Unity3D

unity的依赖注入

2015-07-27 15:46 567 查看
参考文档
http://www.cnblogs.com/zhangchenliang/archive/2013/01/08/2850970.html http://www.tuicool.com/articles/yiUzQj
IUnityContainer container = new UnityContainer();

#region 1.0 注册类型
container.RegisterType<IKiss, Boy>();
var boy = container.Resolve<IKiss>();
Girl gril = new Girl(boy);
#endregion

#region 2.0 注册实例
Boy boy2 = new Boy();
container.RegisterInstance<IKiss>(boy2);
var boy3 = container.Resolve<IKiss>();
Girl gril1 = new Girl(boy3);
#endregion

#region 3.0 单例模式
/*boy4和boy5的属性dt相同,
* 可以证明是单例*/
container.RegisterType<IKiss, Boy>(new ContainerControlledLifetimeManager());
var boy4 = container.Resolve<IKiss>();
var boy5 = container.Resolve<IKiss>();
#endregion

#region 4.0 配置文档配置注册和解析
IUnityContainer container1 = new UnityContainer();
UnityConfigurationSection configuration = ConfigurationManager.GetSection(UnityConfigurationSection.SectionName)
as UnityConfigurationSection;
configuration.Configure(container1, "defaultContainer");
var boy6 = container1.Resolve<IKiss>();
#endregion

#region 5.0 带名称的注册和解析
container.RegisterType<IKiss, Boy>("boy");
container.RegisterType<IKiss, Boy1>("boy1");
var boy7 = container.Resolve<IKiss>("boy1");
var list=container.ResolveAll<IKiss>();
#endregion


public interface IKiss
{
void Kiss();
}

public class Girl
{
public IKiss boy;
public Girl(IKiss boy)
{ this.boy = boy; }
public void Kiss()
{
this.boy.Kiss();
Console.WriteLine("girl is kissing");
}
}

public class Boy : IKiss
{
public Boy()
{
this.dt = DateTime.Now;
}
public DateTime dt { get; set; }
public void Kiss()
{
Console.WriteLine("boy is kissing");
}
}

public class Boy1 : IKiss
{
public Boy1()
{
this.dt = DateTime.Now;
}
public DateTime dt { get; set; }
public void Kiss()
{
Console.WriteLine("boy1 is kissing");
}
}


<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
</configSections>

<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>

<unity>
<containers>
<container name="defaultContainer">
<register type="DI.IKiss,DI" mapTo="DI.Boy,DI"/>
</container>
</containers>
</unity>
</configuration>


四种注入方式

public interface IPeople { void Live();}
public interface IEat { void Eat();}
public interface ISleep { void Sleep(); }
public interface IPlay { void Play();}

public class PlayBoy : IPeople
{
//构造函数注入
public IEat PEat { get; set; }

//属性注入
[Dependency]
public ISleep PSleep { get; set; }

public IPlay PPlay { get; set; }

public PlayBoy(IEat eat)
{ this.PEat = eat; }

[InjectionMethod]
public void Initialize(IPlay play)
{ this.PPlay = play; }

public void Live()
{

this.PEat.Eat();
this.PSleep.Sleep();
this.PPlay.Play();
Console.WriteLine("playboy is walking");
}
}
public class BoyEat : IEat
{
public void Eat()
{
Console.WriteLine("eat rice and meat");
}
}
public class BoySleep : ISleep
{
public void Sleep()
{
Console.WriteLine("sleep at 12:00 and wake up at 8:00");
}
}
public class BoyPlay : IPlay
{
public void Play()
{
Console.WriteLine("play war3 and dota");
}
}


注册和解析

IUnityContainer container = new UnityContainer();
container.RegisterType<IPeople, PlayBoy>();
container.RegisterType<IEat, BoyEat>();
container.RegisterType<ISleep, BoySleep>();
container.RegisterType<IPlay, BoyPlay>();

var p = container.Resolve<IPeople>();
p.Live();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: