2

I am new to Autofac and IOC concept. I have following code which I am not getting or understanding what it is doing.

`

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();
        }
    }
 }

` From above code what I understood is that, We are registering the Singleton Instance in Container and we are updating the container. I searched online For IRegistrationBuilder interface example but I could not get any satisfying answer.

Can anyone please help me to understand the concept of IRegistrationBuilder.

I am referring this code from NopCommerce application. Thanks in Advance.

1 Answers1

0

IRegistrationBuilder is application of builder design pattern within autofac. Look at the line:

x.RegisterInstance(instance).Keyed(key, service).As(service).PerLifeStyle(lifeStyle);

this chain of methods defines registration of istance of certain object. Each of the methods used sets properties used for proper registration. Each of the methods returns builder object which implements IRegistrationBuilder - it holds all those properties. Because PerLifeStyle accepts as first parameter IRegistrationBuilder you can use it in chain above to change builder properties - in case of PerLifeStyle to affect instantiation of the object. Because PerLifeStyle returns IRegistrationBuilder you may use it in the middle of methods invokation chain like:

x.RegisterInstance(instance).PerLifeStyle(lifeStyle).Keyed(key, service).As(service)
mr100
  • 4,340
  • 2
  • 26
  • 38