首页 > 代码库 > Ninject使用介绍
Ninject使用介绍
#region 第二种写法 /// <summary> /// using(IKernel tKernel=new StandardKernel(new PeoKernelServer())) /// { /// ISay tSay= tKernel.Get<ISay>(); /// IPeople tPeople = new PeoEnglish(tSay); /// tPeople.sayHello(); /// } /// </summary> public class PeoKernelServer : NinjectModule { public override void Load() { Bind<ISay>().To<ChinaSay>();//这个地方用法类似第一种 } } #endregion #region 第一种写法 /// <summary> /// ISay pSay = PeoKernel.PeoKernelSigle.KernelSingle.Get<ISay>(); /// IPeople pEoChina = new PeoChina(pSay); /// pEoChina.Name = "陈国岭"; /// pEoChina.sayHello(); /// </summary> public class PeoKernel { protected static PeoKernel _PeoKernel = new PeoKernel(); public static PeoKernel PeoKernelSigle { get { return _PeoKernel; } } protected Ninject.IKernel _Kernel = null; public Ninject.IKernel KernelSingle { get { return _Kernel; } } protected PeoKernel() { _Kernel = new StandardKernel(); BindClass(); } protected void BindClass() { #region 简单绑定 //_Kernel.Bind<ISay>().To<ChinaSay>();//1、一般绑定,必须有无参数构造函数 #region 绑定方法 //Ø To:绑定到接口的具体实现。 //Ø ToConstant:绑定到某个常量值。 //Ø ToMethod:绑定到方法。 //Ø ToProvider:绑定到某个自定义的对象创建提供程序。 //Ø ToSelf:自绑定 #endregion //_Kernel.Bind<ISay>().To<EnglishSay>().WithConstructorArgument(true);//2.构造函数中,参数绑定,可以没有无参数构造函数 #region 参数绑定 // Ø WithConstructorArgument:指定构造函数中相关的参数,还有回调方法的重载。 //Ø WithMetadata:指定相关元数据信息。 //Ø WithParameter:指定相关的自定义参数。这个方法也实现构造函数参数值指定,与WithConstructorArgument类似,如:Bind<IMessage>().To<MessageDB>().WithConstructorArgument("msg", 1);同样可以写成:Bind<IMessage>().To<MessageDB>().WithParameter(new ConstructorArgument("msg", 1)); //Ø WithPropertyValue:指定相关的属性值,还有回调方法的重载。 #endregion //_Kernel.Bind<ISay>().To<EnglishSay>().WithPropertyValue("IsEngOrUSALangle", false);//3.属性绑定,必须有无参构造函数。同样可以写成:Bind<IMessage>().To<MessageDB>().WithParameter(new ConstructorArgument("msg", 1)); //_Kernel.Bind<PeoChina>().ToSelf();//4、自我绑定.自我绑定后,ISay无需传递。IPeople pEoChina = PeoKernel.PeoKernelSigle.KernelSingle.Get<PeoChina>(); #endregion #region 属性注入 //_Kernel.Bind<ISay>().To<AniSay>(); //_Kernel.Bind<AniDog>().ToSelf();//在AniDog中,ISay属性必须添加[Ninject.Inject]特性 #endregion #region 条件绑定 //把ChinaSay指定为PeoChina中的ISay _Kernel.Bind<ISay>().To<ChinaSay>().WhenInjectedInto<PeoChina>();//1、一般绑定,必须有无参数构造函数 //把EnglishSay指定为PeoEnglish中的ISay。同时EnglishSay传递参数true _Kernel.Bind<ISay>().To<EnglishSay>().WhenInjectedInto<PeoEnglish>().WithConstructorArgument(true);//2.构造函数中,参数绑定,可以没有无参数构造函数 _Kernel.Bind<PeoChina>().ToSelf(); _Kernel.Bind<PeoEnglish>().ToSelf(); #endregion #region 线程调用 _Kernel.Bind<ISay>().To<ChinaSay>().InThreadScope();//可以线程调用 #region 调用 指定了对象在InThreadScope,在使用的代码中分别创建了2个线程来进行模拟,最终每个线程都是创建了一个对象。 using (IKernel tKer = new StandardKernel(new PeoKernelServer())) { Thread tT1 = new Thread(new ThreadStart(() => { ISay tPeoSay = tKer.Get<ISay>(); tPeoSay.SayLanager(); })); Thread tT2 = new Thread(new ThreadStart(() => { ISay tPeoSay = tKer.Get<ISay>(); tPeoSay.SayLanager(); })); tT1.Start(); tT2.Start(); } #endregion #endregion } } #endregion #region 伪代码 public interface ISay { string SayLanager(); } public class ChinaSay : ISay { public ChinaSay() { } public string SayLanager() { return "汉语"; } } public class EnglishSay : ISay { private bool _isEngOrUSALangle = false; public bool IsEngOrUSALangle { get { return _isEngOrUSALangle; } set { _isEngOrUSALangle = value; } } public EnglishSay() { } public EnglishSay(bool isEngOrUSALangle) { _isEngOrUSALangle = isEngOrUSALangle; } public string SayLanager() { string strEngLan = "EngLan"; if (_isEngOrUSALangle) { strEngLan = "USALan"; } return strEngLan; } } public interface IPeople { string Name { get; set; } void sayHello(); } public abstract class PeopleBase : IPeople { protected string _Name = ""; public string Name { get { return _Name; } set { _Name = value; } } public virtual void sayHello() { throw new NotImplementedException(); } } public class PeoChina : PeopleBase { public PeoChina() { } private ISay _Say; public PeoChina(ISay pSay) { _Say = pSay; } public override void sayHello() { MessageBox.Show(string.Format("我是中国人,我叫:{0},我说:{1}", _Name, _Say.SayLanager())); } } public class PeoEnglish : PeopleBase { private ISay _Say; public PeoEnglish() { } public PeoEnglish(ISay pSay) { _Say = pSay; } public override void sayHello() { MessageBox.Show(string.Format("I am English,my name is :{0},I Say:{1}", _Name, _Say.SayLanager())); } } public class AniSay : ISay { public AniSay() { } public string SayLanager() { return "wang"; } } public class AniDog { [Ninject.Inject]//属性注入 public ISay jiao { get; set; } public void gouJiao() { MessageBox.Show(jiao.SayLanager()); } } #endregion
Ninject使用介绍
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。