我有一個接口和兩個類實現此接口。在這種情況下,我無法使用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