![](https://img-blog.csdnimg.cn/96ced6920f6d4d4aaa37b1c324e4f61f.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
DryIOC
文章平均质量分 65
DryIoc is fast, small, full-featured IoC Container for .NET
zhy29563
让我踩过的坑,都风吹云散
展开
-
【DryIOC】装饰器
DryIoc中的装饰器一般代表一个装饰器模式。但是结合其他DryIoc功能,尤其是与FactoryMethod结合使用,该概念可能会进一步扩展以涵盖更多场景。DryIoc 装饰器支持:常用服务装饰,为服务添加相关功能根据条件应用装饰器嵌套装饰器并指定自定义嵌套顺序泛型装饰器支持:泛型变化,约束,泛型工厂方法装饰器可以有与被装饰服务不同的重用方式。这里有个额外的为装饰器定义的选项:useDecorateeReuse装饰器可以装饰封装在Func、Lazy及其他包装器中的服务联合装饰器的重用方式原创 2021-12-02 11:51:03 · 520 阅读 · 0 评论 -
【CMake】VSCode配置CSharp控制台程序
cmake_minimum_required(VERSION 3.18 )project(CMakeCSharpDemos LANGUAGES CSharp)add_executable(CMakeCSharpDemo "Program.cs")set(CMAKE_CSharp_FLAGS "/langversion:latest")set_property(TARGET CMakeCSharpDemo PROPERTY VS_DOTNET_TARGET_FRAMEWORK_VERSION "v4原创 2021-12-01 22:12:59 · 1184 阅读 · 0 评论 -
【DryIOC】封装器
在DryIOC中,在使用一个或多个服务时是有用的数据结构。封装器使得使用主要包含两种类型:将待封装的服务作为开放式泛型的类型参数。例如:Func<TService>, Lazy<TService>, IEnumerable<TService>非开放式泛型使用必须的服务类型。例如:LambdaExpression开放式泛型封装福哦个类型参数仅能封装一个服务类型。例如,Func<TArg0, TArg1, TService> 仅封装了 TService原创 2021-12-01 17:08:45 · 1186 阅读 · 0 评论 -
【DryIOC】指定依赖项或基元值
1. 服务类型(Service Type)服务和依赖项解析规范的最小部分是服务类型。它允许容器查找相应的服务注册。void Main(){ var container = new Container(); container.Register<IDependency, Dependency>(); container.Register<Foo>(); // elsewhere container.Resolve<Foo>();}interface原创 2021-11-30 16:54:18 · 456 阅读 · 0 评论 -
【DryIOC】构造函数与工厂方法
1. 多构造函数默认情况,DryIOC期望实现类型仅有一个构造函数。这个构造函数将被使用参数依赖构造注入。如果一个类有多个构造函数,默认情况下,将会抛出ContainerException。为了避免发生异常,需要在注册时指定要使用的构造函数。1.1 使用表达式树指定构造函数void Main(){ var c = new Container(); c.Register<IDependency, Dep>(); c.Register<Foo>(made: Made.Of原创 2021-11-26 16:57:06 · 750 阅读 · 0 评论 -
【DryIOC】开放式泛型
1. 注册开放式泛型服务注册开放式泛型服务于注册普通的泛型几乎相同。区别有以下两点:不能指定静态类型需要使用typeofvoid Main(){ var container = new Container(); container.Register(typeof(ICommand<>), typeof(DoSomethingCommand<>)); var cmd = container.Resolve<ICommand<MyData>>原创 2021-11-26 15:58:51 · 359 阅读 · 0 评论 -
【DryIOC】注册与解析
1. 术语1.1 解析根(Resolution Root)解析根是通过调用Resolve方法从容器中获取到的一个服务对象。以下代码中的client就是一个解析根。var client = container.Resolve<IClient>();1.2 注入的依赖(Injected Dependency)void Main(){ var container = new Container(); container.Register<IClient, Some原创 2021-11-26 14:46:46 · 2811 阅读 · 1 评论 -
【DryIOC】容器的创建与销毁
1. 容器创建void Main(){ // 以下两种方式等价 var container1 = new Container(); var container2 = new Container(rules: Rules.Default, scopeContext: null);}1.1 构造函数// // 摘要: // Creates new container with default rules DryIoc.Rules.Default. public Container原创 2021-11-25 17:17:27 · 691 阅读 · 0 评论 -
【DryIOC】作用域服务(Reuse.Scoped Service)
1. 什么是作用域?DryIOC使用Scope实现工作单元模式。从本质上说,作用域是用于存储已解析或已注入的除实现IDisposable接口的非瞬态已注册服务。一旦服务被创建,一个可重用的对象被存储在作用域的内部集合中,该对象一直保持存活状态,直到作用域被释放。此外,作用域能够保证在多线程场景下服务实例仅被创建一次。2. 什么是当前作用域?当前作用通过var scopedContainer = container.OpenScope()与var nestedScopedContainer = sco原创 2021-11-25 17:03:57 · 751 阅读 · 0 评论 -
【DryIOC】单例服务(Reuse.Singleton Service)
单例服务是指在一个容器中,解析或注入实例都是相同的。void Main(){ var container = new Container(); container.Register<A>(Reuse.Singleton); var a = container.Resolve<A>(); Console.WriteLine(a == container.Resolve<A>());}class A { }True...原创 2021-11-25 10:40:30 · 353 阅读 · 0 评论 -
【DryIOC】瞬态服务(Reuse.Transient Service)
DryIOC支持多种状态的Service,瞬态服务(Reuse.Transient Service)仅是其中一种。意味着该服务不会被重用。调用Resove方法或者注入时,都会重新创建一个服务实例。当你在注册服务时省略reuse参数或者没有改变容器的 Container.Rules.DefaultReuse属性,瞬态服务是容器的默认状态。container.Register<IFoo, Foo>(Reuse.Transient);container.Register<IFoo, Foo&原创 2021-11-25 10:30:54 · 905 阅读 · 0 评论 -
【DryIOC】简单使用
using DryIoc;namespace CSharpDemo{ public class Program { public static void Main(string[] args) { // 硬编码实现 System.Console.WriteLine("=========================================="); System.Consol原创 2021-11-24 16:31:03 · 990 阅读 · 1 评论