Я хотел бы преобразовать метод для использования обобщений.В настоящее время он жестко закодирован для следующих типов:
DataContext.Document
в частичном классе контекста данных и наследуется от object
DataContext.Documents
также в этом частичном классе и наследуетсяот Linq.Table<Document>
Import.Document
наследование от пользовательского класса ImportObject
Исходный метод:
public void ProcessDocuments(Delegate method, params object[] args)
{
using (DataContext dc = new DataContext())
{
dc.ObjectTrackingEnabled = false;
// Map from DataContext object to ImportObject
Mapper.CreateMap<Document, Import.Document>();
// Loop through DataContext objects
foreach (Document d in dc.Documents)
{
Import.Document doc = Mapper.Map<Document, Import.Document>(d);
args[0] = doc;
method.DynamicInvoke(args);
}
}
}
Попытка:
public void ProcessImportObjects<TSource, TDestination>
(Action<TDestination, ImportDataSource, int> processMethod, ImportDataSource importSource, int resultId)
{
using (DataContext dc = new DataContext())
{
dc.ObjectTrackingEnabled = false;
Mapper.CreateMap<TSource, TDestination>();
foreach (TSource d in dc.Documents) // PROBLEM: Hard-coded reference to property on DataContext
{
TDestination doc = Mapper.Map<TSource, TDestination>(d);
processMethod(doc, importSource, resultId);
}
}
}
(Здесь TDestination
должно быть типа ImportObject
, но я не уверен, как это выразить.)
Как показано накомментарий foreach должен ссылаться на свойство в DataContext, которое является IEnumerable<TSource>
.Означает ли это, что мне нужно передать DataContext в качестве параметра или есть лучший способ?