Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用autofac时,两种装饰图案的区别是什么?_C#_Dependency Injection_Autofac - Fatal编程技术网

C# 使用autofac时,两种装饰图案的区别是什么?

C# 使用autofac时,两种装饰图案的区别是什么?,c#,dependency-injection,autofac,C#,Dependency Injection,Autofac,以上两种注册有什么区别 builder.RegisterDecorator<IHeaderMappingRepository>( (c, inner) => new CachedHeaderMappingRepository(inner), fromKey: "headerMappingRepository"); builder.RegisterType<SqlHeaderMappingRepository>() .Named<IHe

以上两种注册有什么区别

builder.RegisterDecorator<IHeaderMappingRepository>(
    (c, inner) => new CachedHeaderMappingRepository(inner), 
    fromKey: "headerMappingRepository");
builder.RegisterType<SqlHeaderMappingRepository>()
    .Named<IHeaderMappingRepository>("headerMappingRepository");
builder.RegisterDecorator(
(c,内部)=>新的缓存标头映射(内部),
fromKey:“headermappingpositional”);
builder.RegisterType()
.命名为(“校长职位”);

builder.Register(c=>newcachedHeaderMappingPropository(
c、 解析())
.As();
builder.RegisterType().AsSelf();

这两个代码示例非常相似

唯一的区别是第一个使用命名解析,而第二个使用显式解析。对于第二个代码示例,如果要使用另一个
iHeaderMappingPropository
实现,则必须更改适配器注册,而另一方面,必须更改命名注册

从功能上讲,以下两种注册是等效的

builder.RegisterDecorator<IHeaderMappingRepository>(
                      (c, inner) => new CachedHeaderMappingRepository(inner), 
                      fromKey: "headerMappingRepository")
       .As<IHeaderMappingRepository>();
builder.RegisterType<SqlHeaderMappingRepository>()
       .Named<IHeaderMappingRepository>("headerMappingRepository");


builder.Register(c => new CachedHeaderMappingRepository(
                      c.ResolveNamed<IHeaderMappingRepository>("headerMappingRepository")))
       .As<IHeaderMappingRepository>();
builder.RegisterType<SqlHeaderMappingRepository>()
       .Named<IHeaderMappingRepository>("headerMappingRepository"));
builder.RegisterDecorator(
(c,内部)=>新的缓存标头映射(内部),
fromKey:“headermappingpositionary”)
.As();
builder.RegisterType()
.命名为(“校长职位”);
builder.Register(c=>newcachedHeaderMappingPostory(
c、 (名称为(“校长职位”))
.As();
builder.RegisterType()
。名为(“校长职位”);

这两个代码示例非常相似

唯一的区别是第一个使用命名解析,而第二个使用显式解析。对于第二个代码示例,如果要使用另一个
iHeaderMappingPropository
实现,则必须更改适配器注册,而另一方面,必须更改命名注册

从功能上讲,以下两种注册是等效的

builder.RegisterDecorator<IHeaderMappingRepository>(
                      (c, inner) => new CachedHeaderMappingRepository(inner), 
                      fromKey: "headerMappingRepository")
       .As<IHeaderMappingRepository>();
builder.RegisterType<SqlHeaderMappingRepository>()
       .Named<IHeaderMappingRepository>("headerMappingRepository");


builder.Register(c => new CachedHeaderMappingRepository(
                      c.ResolveNamed<IHeaderMappingRepository>("headerMappingRepository")))
       .As<IHeaderMappingRepository>();
builder.RegisterType<SqlHeaderMappingRepository>()
       .Named<IHeaderMappingRepository>("headerMappingRepository"));
builder.RegisterDecorator(
(c,内部)=>新的缓存标头映射(内部),
fromKey:“headermappingpositionary”)
.As();
builder.RegisterType()
.命名为(“校长职位”);
builder.Register(c=>newcachedHeaderMappingPostory(
c、 (名称为(“校长职位”))
.As();
builder.RegisterType()
。名为(“校长职位”);