Я использую mef для создания веб-сервисов WCF. Так выглядит сервис:
[Export]
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class MobileService
{
[Import]
public IEmailService EmailService { get; set; }
[Import]
public ILoggerService LoggerService { get; set; }
[Import]
public IContextManager ContextManager { get; set; }
Вот как выглядит код для получения экземпляра службы:
// Get Service instace via MEF
public object GetInstance(InstanceContext instanceContext, Message message)
{
var lazyInstance = Container.GetExports(ServiceType, null, null).FirstOrDefault();
var instance = lazyInstance.Value;
return instance;
}
MEF создает EmailService, LoggerService, и если все в порядке, они живут счастливо, пока срок службы.
Теперь ContextManager — это другое животное. В GetInstance — мне очень нравится «убивать» его и создавать заново. ContextManager изучает URL и заголовки во время построения и заполняет «контекст». С таким кодом, как у меня, он создается с первого раза и никогда не уничтожается. Как изменить это поведение?
Спасибо!