0
我有方法返回实现特定接口的对象。取决于参数方法返回不同的对象。所有实现相同的接口,所以我可以在方法外部的接口上使用像Execute()一样的方法。 此解决方案迫使我避免使用MEF。我怎样才能同时使用这两种解决方案?从MEF导入构造函数并在不同的类中分离不同的策略?MEF中的设计模式策略
下面是一个例子代码:
[Export(typeof(ICrowdMessageProcessorFactory))]
public class CrowdMessageProcessorFactory : ICrowdMessageProcessorFactory
{
private readonly IDefaultCrowdRequestAnalyzer _defaultProcessor;
[ImportingConstructor]
public CrowdMessageProcessorFactory(IDefaultCrowdRequestAnalyzer defaultProcessor)
{
_defaultProcessor = defaultProcessor;
}
public Metadata PayloadMetadata { get; private set; }
public ICrowdMessageProcessor Create(InsertCrowdsourcingEventRequest request, DateTime fireUtcDateTime)
{
if (request == null)
{
throw new ArgumentNullException(nameof(request));
}
PayloadMetadata = Metadata.Create(request);
var marketRegion = PayloadMetadata?.GetMarketRegion();
switch (marketRegion)
{
case MarketRegion.Uk:
return new UkCrowdMessageProcessor();
}
return new DefaultCrowdMessageProcessorAdapter(request, fireUtcDateTime, _defaultProcessor);
}
}
这里是使用该方法
[ImportingConstructor]
public CrowdResponseAnalyzer(
ICrowdMessageProcessorFactory processorFactory)
{
_processorFactory = processorFactory;
}
public void Execute(InsertCrowdsourcingEventRequest request, DateTime fireUtcDateTime)
{
Guard.ArgumentNotNull(request, "request");
try
{
ICrowdMessageProcessor processor = _processorFactory.Create(request, fireUtcDateTime);
processor.Execute();
}
//(...)
}
的总结: 我喜欢在UkCrowdMessageProcessor不同的策略中分离到不同的类,这里和DefaultCrowdMessageProcessorAdapter。但在新的这种类(ICrowdMessageProcessor)我也需要使用ImportingConstructor。我该怎么做?
您目前如何决定返回哪个对象?也许分享你的代码? – TomDoesCode
我已添加样本 – Rayet
请将您的解决方案移至答案中。这使得它更清晰并帮助其他可能会遇到同样问题的人。谢谢 –