2014-07-18 4 views
2

저는 Autofac 및 IOC 개념을 처음 사용합니다. 나는 내가 얻지 못하거나 다음과 같은 코드를 가지고있다. 내가 이해 무엇AutoFac IRegistrationBuilder

는 위의 코드에서
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(); 
     } 
    } 
} 

`

`

, 우리는 컨테이너의 싱글 인스턴스를 등록하고 우리가 용기를 업데이트하는 것입니다. 온라인으로 검색했습니다. IRegistrationBuilder 인터페이스 예는 만족스러운 답변을 얻을 수 없습니다.

누구나 의 개념을 이해하는 데 도움을 줄 수 있습니까? IRegistrationBuilder.

이 코드는 NopCommerce 응용 프로그램에서 참조하고 있습니다. 미리 감사드립니다.

답변

0

IRegistrationBuilder는 autofac 내에 빌더 디자인 패턴을 적용한 것입니다. 라인을보세요 :

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

이 일련의 방법은 특정 객체의 속성에 대한 등록을 정의합니다. 사용 된 각 메소드는 적절한 등록에 사용되는 등록 정보를 설정합니다. 각 메소드는 IRegistrationBuilder를 구현하는 빌더 객체를 반환합니다.이 객체는 모든 속성을 보유합니다. PerLifeStyle은 첫 번째 매개 변수 인 IRegistrationBuilder를 허용하기 때문에 위의 체인에서이를 사용하여 객체의 인스턴스화에 영향을주는 PerLifeStyle의 경우 빌더 속성을 변경할 수 있습니다. PerLifeStyle은 IRegistrationBuilder를 반환하기 때문에 다음과 같이 메서드 invokation chain 중간에 사용할 수 있습니다.

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