2016-06-20 5 views
0

WCF Autofac 컨테이너 (IContainer)는 비 WCF 프로젝트 클래스에서 어떻게 사용할 수 있습니까?n 계층 아키텍처의 다른 프로젝트 수준에서 WCF Autofac 컨테이너 사용

아래 예제에서 Autofac to Service 프로젝트를 추가하는 것이 유일한 해결책이거나이를 달성하기위한 다른 우아한 방법이 있습니다. 적합하지 않은

어떤 도움에 매개 변수로 서비스를 전달

을 감상 할 수있다.

WCF 서비스 프로젝트 (사용 Autofac WCF)

public class DiscountWCFService 
{ 
    public IDiscountService service {get; set;} 
} 

서비스 프로젝트

public class DiscountService : IDiscountService 
{ 
    public IDiscountRepository repository {get; set;} 
} 


public static class DiscountExtension 
{ 
    public static IDiscountProcessor GetProcessor(this Discount discount) 
    { 
     if(discount.Type=1) return TypeAProcessor(); 
     if(discount.Type=2) return TypeBProcessor(); 

     return null; 
    } 
} 

public class TypeAProcessor : IDiscountProcessor 
{ 
    // Is it possible to use Autofac? 
    // E.G. IService fooService = AutofacContainer.Resolve<IFooService> 
} 

public class TypeBProcessor : IDiscountProcessor 
{ 
} 

엔티티 프로젝트

public class Discount 
{ 
} 

답변

0

Autofac에 keyed registration을 사용하면 하루가 절약되었습니다. 내 경우에 대한

샘플 솔루션은

builder.RegisterType<TypeAProcessor>().As<IDiscountProcessor>().Keyed<IDataService>(Type.One); 

builder.RegisterType<TypeBProcessor>().As<IDiscountProcessor>().Keyed<IDataService>(Type.Two);  

builder.Register<Func<Discount, IDiscountProcessor>>(c => 
{ 
    var componentContext = c.Resolve<IComponentContext>(); 
    return (discount) => 
    { 
     var processor = componentContext.ResolveKeyed<IDiscountProcessor>(discount.Type); 
     return dataService; 
    }; 
}); 
입니다