首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoFac IRegistrationBuilder

AutoFac IRegistrationBuilder
EN

Stack Overflow用户
提问于 2014-07-18 15:05:36
回答 1查看 556关注 0票数 2

我对Autofac和国际奥委会的概念很陌生。我有下面的代码,我没有得到或理解它正在做什么。

`

代码语言:javascript
复制
public void AddComponentInstance<TService>(object instance, string key = "",                               ComponentLifeStyle lifeStyle = ComponentLifeStyle.Singleton)

    {

        AddComponentInstance(typeof(TService), instance, key, lifeStyle);
    }

 public void AddComponentInstance(Type service, object instance, string key = "",ComponentLifeStyle lifeStyle = ComponentLifeStyle.Singleton)
    {
        UpdateContainer(x =>
        {
            var registration = x.RegisterInstance(instance).Keyed(key, service).As(service).PerLifeStyle(lifeStyle);
        });
    }

 public void UpdateContainer(Action<ContainerBuilder> action)
{

var builder = new ContainerBuilder();
        action.Invoke(builder);
        builder.Update(_container);

 }



public static class ContainerManagerExtensions

{


public static Autofac.Builder.IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> PerLifeStyle<TLimit, TActivatorData, TRegistrationStyle>(this Autofac.Builder.IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> builder, ComponentLifeStyle lifeStyle)
    {

switch (lifeStyle)
        {


            case ComponentLifeStyle.LifetimeScope:
                return HttpContext.Current != null ? builder.InstancePerHttpRequest() : builder.InstancePerLifetimeScope();
            case ComponentLifeStyle.Transient:
                return builder.InstancePerDependency();
            case ComponentLifeStyle.Singleton:
                return builder.SingleInstance();
            default:
                return builder.SingleInstance();
        }
    }
 }

根据上面的代码,我理解的是,我们正在容器中注册Singleton实例,并且正在更新容器。我在网上搜索了IRegistrationBuilder接口示例,但没有得到令人满意的答案。

有谁能帮我理解IRegistrationBuilder.的概念吗?

我指的是来自NopCommerce应用程序的代码。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-07-23 08:20:55

IRegistrationBuilder是在autofac中应用的构建器设计模式。看看这句话:

代码语言:javascript
复制
x.RegisterInstance(instance).Keyed(key, service).As(service).PerLifeStyle(lifeStyle);

这一系列的方法定义了对特定对象的状态的注册。所使用的每种方法都设置用于正确注册的属性。每个方法都返回实现IRegistrationBuilder的builder -它保存所有这些属性。因为PerLifeStyle接受作为第一个参数的IRegistrationBuilder,所以可以在上面的链中使用它来更改构建器属性--以防PerLifeStyle影响对象的实例化。因为PerLifeStyle返回IRegistrationBuilder,所以您可以在方法调用链的中间使用它,例如:

代码语言:javascript
复制
x.RegisterInstance(instance).PerLifeStyle(lifeStyle).Keyed(key, service).As(service)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24828215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档