내 서비스 레이어를 내 도메인 모델 레이어의 정면으로 사용하여 도메인 개체에 대한 호출을 조정합니다. 인스턴스 생성을 위해 MEF를 활용하기 위해 WCF 서비스에 대한 커스텀 인스턴스 공급자를 작성했습니다. 이제 감사 및 로깅을 위해 PIAB를 적용해야합니다. 내가 어떻게 할 수 있니?MEF와 함께 WCF에서 PIAB를 적용하는 방법은 무엇입니까?
0
A
답변
0
지미 톤 너는 MEF와 PIAB를 혼합하는 것에 대한 좋은 블로그를 작성했습니다 (http://blogs.msdn.com/b/jimmytr/archive/2010/06/22/mixing-mef-and-piab.aspx 방문). 그것은 PIAB를 MEFied WCF 서비스에 적용하는 내 솔루션에 영감을주었습니다. 아이디어는 간단합니다. MEF를 사용하여 모든 서비스 구성을 먼저 관리하십시오. 그런 다음 사용자 지정 인스턴스 공급자에서 MEF 컨테이너로 서비스 인스턴스를 찾은 다음 PolicyInjection.Wrap을 적용합니다.
서비스 :
[Export(typeof(ICustomerService))]
public class CustomerService : ICustomerService
{
#region ICustomerService Members
public Customer GetCustomer(string customerID)
{
return CustomerDAO.GetCustomer(customerID);
}
#endregion
}
사용자 인스턴스 제공자 :
public class PolicyInjectionInstanceProvider : IInstanceProvider
{
private Type serviceContractType;
private CompositionContainer Container { get; set; }
public PolicyInjectionInstanceProvider(Type t)
{
if (t!= null && !t.IsInterface)
{
throw new ArgumentException("Specified Type must be an interface");
}
this.serviceContractType = t;
}
#region IInstanceProvider Members
public object GetInstance(InstanceContext instanceContext, System.ServiceModel.Channels.Message message)
{
Type type = instanceContext.Host.Description.ServiceType;
if (serviceContractType != null)
{
Compose();
var importDefinition = new ImportDefinition(i => i.ContractName.Equals(serviceContractType.FullName), serviceContractType.FullName, ImportCardinality.ZeroOrMore, false, false);
var atomicComposition = new AtomicComposition();
IEnumerable<Export> extensions;
Container.TryGetExports(importDefinition, atomicComposition, out extensions);
if (extensions != null && extensions.Count() > 0)
{
var service = extensions.First().Value;
return PolicyInjection.Wrap(serviceContractType, service);
}
}
else
{
if (!type.IsMarshalByRef)
{
throw new ArgumentException("Type Must inherit MarshalByRefObject if no ServiceInterface is Specified");
}
return PolicyInjection.Create(type);
}
return null;
}
public object GetInstance(InstanceContext instanceContext)
{
return GetInstance(instanceContext, null);
}
public void ReleaseInstance(InstanceContext instanceContext, object instance)
{
var disposable = instance as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
Container.Dispose();
}
#endregion
#region Private Methods
private void Compose()
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog(@".\")); //Extensions
Container = new CompositionContainer(catalog);
}
#endregion
}
다음 코드 샘플입니다
관련 문제
- 1. MEF와 함께 응용 프로그램 서비스를 내보내고 가져 오는 방법은 무엇입니까?
- 2. .Net 4.0에서 MEF와 함께 DLR을 사용하는 방법은 무엇입니까?
- 3. event.stopPropagation을 적용하는 방법은 무엇입니까?
- 4. MEF와 IoC 중 어느 것을 선택해야할지 결정하는 방법은 무엇입니까?
- 5. 'Raphael'캔버스에 애니메이션을 적용하는 방법은 무엇입니까?
- 6. 백그라운드에 애니메이션을 적용하는 방법은 무엇입니까?
- 7. QGraphicsPixmapItem에서 효과를 적용하는 방법은 무엇입니까?
- 8. 보기에 애니메이션을 적용하는 방법은 무엇입니까?
- 9. 버튼에 CSS를 적용하는 방법은 무엇입니까?
- 10. MapView가로드되면 애니메이션을 적용하는 방법은 무엇입니까?
- 11. 테마 런타임을 적용하는 방법은 무엇입니까?
- 12. 시간 형식을 적용하는 방법은 무엇입니까?
- 13. favicon에 애니메이션을 적용하는 방법은 무엇입니까?
- 14. MEF 재구성 후 삭제하기 위해 DLL을 언로드하는 방법은 무엇입니까? MEF와
- 15. MEF와 프리즘 통합
- 16. MEF와 IoC 컨테이너 결합하기
- 17. WCF에서 시간 초과를 피하는 방법은 무엇입니까?
- 18. WCF에서 메타 데이터에서 바인딩을 제거하는 방법은 무엇입니까?
- 19. wcf에서 맞춤 비누 헤더를 추가하는 방법은 무엇입니까?
- 20. WCF에서 메시지 계약을 정의하는 방법은 무엇입니까?
- 21. MVC 아키텍처를 ExtJS 프로젝트에 적용하는 방법은 무엇입니까?
- 22. WCF에서 WSDualHttpBinding의 이점은 무엇입니까?
- 23. Windows 응용 프로그램에서 MVC를 적용하는 방법은 무엇입니까?
- 24. 이미지 버튼에 호버 효과를 적용하는 방법은 무엇입니까?
- 25. 여러 선언에 동일한 선언을 적용하는 방법은 무엇입니까?
- 26. CABasicAnimation으로 레이어의 프레임에 애니메이션을 적용하는 방법은 무엇입니까?
- 27. 하위 뷰인 UITextView에 애니메이션을 적용하는 방법은 무엇입니까?
- 28. PyQt에서 그린 그래프에 애니메이션을 적용하는 방법은 무엇입니까?
- 29. 데이터 세트에 페이징을 적용하는 방법은 무엇입니까?
- 30. 크기 조정 방법을 적용하는 방법은 무엇입니까?