上述两个注册之间有什么区别?
builder.RegisterDecorator<IHeaderMappingRepository>(
(c, inner) => new CachedHeaderMappingRepository(inner),
fromKey: "headerMappingRepository");
builder.RegisterType<SqlHeaderMappingRepository>()
.Named<IHeaderMappingRepository>("headerMappingRepository");
和
builder.Register(c => new CachedHeaderMappingRepository(
c.Resolve<SqlHeaderMappingRepository>()))
.As<IHeaderMappingRepository>();
builder.RegisterType<SqlHeaderMappingRepository>().AsSelf();
这两个代码示例非常相似。
唯一的区别是第一个使用命名分辨率,而第二个使用显式分辨率。在第二个代码示例中,如果您想使用另一个IHeaderMappingRepository
实现,则必须更改适配器注册,而在另一种情况下,您必须更改名为的注册。
从功能上讲,以下两个注册是等效的。
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"));