Lenic.DI -- Another IOC Container Library Using Delegate

Lenic.DI

Another IOC Container Library Using Delegate.

 

Characteristic

  • Use delegate generated object.
  • Support the uncertain parameters.
  • Lazy load.

Basic Usage

复制代码
IContainer container = new Container();

container.Register(null, c => new Person() { Id = 3, Name = "张三" });

var p = container.Resolve<Person>();

Assert.IsInstanceOfType(p, typeof(Person));
Assert.AreEqual(3, p.Id);
Assert.AreEqual("张三", p.Name);
复制代码

Singleton Lifetime:

复制代码
IContainer container = new Container();

container.Register(new SingleLifetime(), c => new Person() { Id = 4, Name = "李四" });

var p = container.Resolve<Person>();

Assert.IsInstanceOfType(p, typeof(Person));
Assert.AreSame(p, container.Resolve<Person>());
Assert.AreEqual(4, p.Id);
Assert.AreEqual("李四", p.Name);
复制代码

And, has other lifetime, Waiting for you to explore.

Use it with iterative method:

复制代码
IContainer container = new Container();

container.Register(null, c => new Person() { Id = 3, Name = "张三" })
         .RegisterNamed(null, "x", c => new Person() { Id = 4, Name = c.Resolve<Person>().Name });

var p = container.ResolveNamed<Person>("x");

Assert.IsInstanceOfType(p, typeof(Person));
Assert.AreEqual(4, p.Id);
Assert.AreEqual("张三", p.Name);
复制代码

Auto Register:

IContainer container = new Container();
container.OnResolveError += ContainerExtensions.DefaultRegister();

var p = container.Resolve<Person>();
Assert.IsNotNull(p);

Auto Interface Register:

IContainer container = new Container();
var interfaceRegister = ContainerExtensions.InterfaceRegister();
container.OnResolveError += interfaceRegister;

var im = container.Resolve<IPerson>();
Assert.IsNotNull(im);
Assert.IsInstanceOfType(im, typeof(IPerson));

Auto Generic Register:

IContainer container = new Container();
container.Register(null, c => 16);
container.OnResolveError += ContainerExtensions.GenericRegister(typeof(IList<>), typeof(List<>));

var g = container.Resolve<IList<string>>();
Assert.IsNotNull(g);
Assert.IsInstanceOfType(g, typeof(IList<string>));

And other, will be coming...

 

Look it on CodePlex, Thank you.

posted @   Lenic  阅读(1664)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示