我有一个接口和两个类实现此接口。在这种情况下,我无法使用MEF概念。我的代码如下。请帮助我使用MEF转换相同的内容。托管可扩展框架 - 当两个类实现一个接口时无法使用mef
public interface IResultsRepository
{
IList<string> GetResults();
string GetSummary();
}
[Export(typeof(IResultsRepository))]
public class ExcelResultsRepository : IResultsRepository
{
private readonly string filePath;
private readonly string worksheetName;
[ImportingConstructor]
public ExcelResultsRepository([Import("FilePath")]string filePath, [Import("WorkSheetName")]string worksheetName)
{
this.filePath = filePath;
this.worksheetName = worksheetName;
}
public IList<string> GetResults()
{
}
public string GetSummary()
{
}
}
[Export(typeof(IResultsRepository))]
public class ResultsFormRepository : IResultsRepository
{
private readonly ResultForm resultForm;
[ImportingConstructor]
public ResultsFormRepository([Import("ResultFormInstance")]ResultForm resultForm)
{
this.resultForm = resultForm;
}
public IList<string> GetResults()
{
}
public string GetSummary()
{
}
}
[Export("ResultFormInstance")]
public class ResultForm
{
public string Tables
{
get { return ""; }
}
public string Summary
{
get
{
return "";
}
}
}
[Export]
public class ResultsContentConverter
{
private readonly IResultsRepository resultRepository;
[ImportingConstructor]
public ResultsContentConverter([Import(typeof(IResultsRepository))]IResultsRepository resultRepository)
{
this.resultRepository = resultRepository;
}
public ResultContent GetResultContent()
{
//logic to convert the format and return formatted object containg results and summary
}
}
[TestFixture]
[Export]
public class ResultComapreTest
{
[Import]
private ResultsContentConverter excelContentConverter;
[Import("ResultFormConverter", typeof(IResultsRepository))]
private ResultsContentConverter resultFormContentConverter;
[Test]
public void CompareResultFromResultForm()
{
ResultContent expectedResult;
ResultContent actualResult;
using (IResultsRepository excelResultsRepository = new ExcelResultsRepository(@"C:\Users\akuma211\Abhineet\Project\Sample\UnityContainerLearning\Sample\book1.xlsx", "sheet1"))
{
var converter = new ResultsContentConverter(excelResultsRepository);
expectedResult = converter.GetResultContent();
}
using (IResultsRepository resultsRepository = new ResultsFormRepository(new ResultForm()))
{
var converter = new ResultsContentConverter(resultsRepository);
actualResult = converter.GetResultContent();
}
Assert.AreEqual(expectedResult.Summary, actualResult.Summary);
Assert.AreEqual(expectedResult.Tables[0].Rows.Count, actualResult.Tables[0].Rows.Count);
}
}
在测试方法中,我应该使用MEF。请帮我
感谢
嗨,我在下面的编辑,因为我想的测试方法。
[Test]
public void CompareResultFromResultForm()
{
ResultContent expectedResult;
ResultContent actualResult;
Compose();// MEF composer, that composes my ResultsContentConverter object
//using (IResultsRepository excelResultsRepository = new ExcelResultsRepository(@"C:\Users\akuma211\Abhineet\Project\Sample\UnityContainerLearning\Sample\book1.xlsx", "sheet1"))
//{
// var converter = new ResultsContentConverter(excelResultsRepository);
// expectedResult = converter.GetResultContent();
//}
expectedResult = excelContentConverter.GetResultContent();
//using (IResultsRepository resultsRepository = new ResultsFormRepository(new ResultForm()))
//{
// var converter = new ResultsContentConverter(resultsRepository);
// actualResult = converter.GetResultContent();
//}
actualResult = resultFormContentConverter.GetResultContent();
Assert.AreEqual(expectedResult.Summary, actualResult.Summary);
Assert.AreEqual(expectedResult.Tables[0].Rows.Count, actualResult.Tables[0].Rows.Count);
}
HI我用importmany,这样做,如下
ResultContent expectedResult;
ResultContent actualResult;
var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
var container = new CompositionContainer(catalog);
container.ComposeExportedValue<string>("FilePath", @"C:\Users\akuma211\Abhineet\Project\Sample\UnityContainerLearning\Sample\book1.xlsx");
container.ComposeExportedValue<string>("WorkSheetName", "sheet1");
container.ComposeExportedValue<ResultForm>("ResultFormInstance", new ResultForm());
container.ComposeParts(this);
//ResultComapreTest obj = container.GetExportedValue<ResultComapreTest>();
foreach (IResultsRepository rep in repository)
{
var converter = new ResultsContentConverter(rep);
converter.GetResultContent();
}
但我不希望创建运用新的ResultsContentConverter对象。 相反的foreach我用
using (IResultsRepository excelResultsRepository = (repository.Where(rep => rep.GetType() == typeof(ExcelResultsRepository)).Select(rep => rep).First()))
{
var converter = new ResultsContentConverter(excelResultsRepository);
expectedResult = converter.GetResultContent();
}
using (IResultsRepository resultsRepository = (repository.Where(rep => rep.GetType() == typeof(ResultsFormRepository)).Select(rep => rep).First()))
{
var converter = new ResultsContentConverter(resultsRepository);
actualResult = converter.GetResultContent();
}
Assert.AreEqual(expectedResult.Summary, actualResult.Summary);
Assert.AreEqual(expectedResult.Tables[0].Rows.Count, actualResult.Tables[0].Rows.Count);
你到底在问什么?你能解释一下你的问题究竟是什么?你有错误吗?编译时或运行时?什么错误信息?你的断言失败了吗? – nvoigt
我想让我的resultcontentconverter对象使用mef –
创建好吧,那就是你想要的。你尝试了什么?发生了什么?你预期会发生什么? – nvoigt