2012-07-27 70 views
0

是否可以使用MEF来组成WCF RIA域服务?MEF - 如何撰写WCF RIA DomainService?

比方说,我有以下域服务属性:

[Import(RequiredCreationPolicy = CreationPolicy.Shared)] 
public TestClass Dependency{ get; set; } 

而且TestClass中..

[Export] 
public class TestClass 
{ 
    public void Do() 
    { 

    } 
} 

而且我有一个DomainServiceFactory类:

public class DomainServiceFactory : IDomainServiceFactory 
{ 
    private readonly ComposablePartCatalog _catalog; 
    private readonly CompositionContainer _container; 

    public DomainServiceFactory() 
    { 
     _catalog = new TypeCatalog(typeof(DomainService1), typeof(DomainService2)); 

     _container = new CompositionContainer(_catalog); 
     //What should I call here? _container.SatisfyImportsOnce(this); 
    } 

    #region Implementation of IDomainServiceFactory 

    public DomainService CreateDomainService(Type domainServiceType, DomainServiceContext context) 
    { 
     DomainService domainService; 
     var export = _container.GetExports(domainServiceType, null, null).FirstOrDefault(); 
     if(export != null) 
     { 
      domainService = (DomainService) export.Value; 
     } 
     else 
     { 
      domainService = (DomainService)Activator.CreateInstance(domainServiceType); 
     } 


     domainService.Initialize(context); 

     return domainService; 

    } 

    public void ReleaseDomainService(DomainService domainService) 
    { 
     domainService.Dispose(); 
    } 

    #endregion 
} 

是否SatisfyImportsOnce构建容器的方法?输入参数是一个ComposablePart,我应该传入什么?

问候。

回答

0

你已经构建你的容器,当你拨打:

_container = new CompositionContainer(_catalog); 

而当你没有得到你的DomainServiceFactory很少有一点调用_container.SatisfyImportsOnce(this);

当你调用export.Value,任何进口将自动满足您的域服务类型的任何导入。你错过了什么/想要达到什么目的?

+0

当调用GetExports(...)时,我得到空。这就是为什么我认为它没有初始化。 – Alberto 2012-07-27 17:34:14

+0

您是否已经使用特定合约导出了您的类型I.e [Export(typeof(DomainService))]还是仅[Export]? – 2012-07-27 17:49:09

+0

只需[导出]。星期一将尝试[导出(typeof(DomainService))]。没有意识到。 – Alberto 2012-07-27 17:52:06