У меня есть три проектаМожете ли вы передать общий делегат без параметра типа?
- Веб-приложение MVC
- Service приложение, которое является своего рода два слоя бизнес/хранилище
- Entity Framework (все конфигурации EF живет здесь)
MVC ссылки> услуга
Услуга ссылки> EF
У меня есть эти три метода в настоящее время, которые выполняют некоторую работу.
public bool StoreUpload<T>(UploadInformation information)
where T : class, IUploadEntity { }
public bool RemoveUpload<T>(UploadInformation information)
where T : class, IUploadEntity { }
public bool CommitUpload<T>(UploadInformation information)
where T : class, IUploadEntity { }
Я называю эти три метода из моего контроллера, используя эти интерфейсы, которые делегат на методы работы выше:
Boolean StoreUpload(UploadInformation information);
Boolean RemoveUpload(UploadInformation information);
Boolean CommitStoredDocuments(UploadInformation information);
Исходя из условия из UploadTypes перечисления в коммутаторе я называю правильный метод работы. Я делаю это, потому что я не хочу, чтобы мой проект mvc имел доступ к типам базы данных EF, иначе я знаю, что кто-то начнет запрашивать данные со всего приложения. Я использую эти заявления переключатель для всех сопряженных методов:
public bool StoreUpload(UploadInformation information)
{
switch (information.Type)
{
case UploadTypes.AutoIncident:
return RemoveUpload<AutoIncident>(information);
case UploadTypes.Incident:
return RemoveUpload<IncidentInjury>(information);
case UploadTypes.Inspection:
return RemoveUpload<Inspection>(information);
case UploadTypes.OtherIncident:
return RemoveUpload<OtherIncident>(information);
default:
return false;
}
}
public bool RemoveUpload(UploadInformation information) { ... }
public bool CommitStoredUpload(UploadInformation information) { ... }
Этот метод может пролить немного света на то, что параметры типов используются для. Я обновляю таблицы в общем виде с помощью EF.
private bool CommitStoredDocuments<T>(UploadInformation information) where T : class, IUploadEntity
{
var uploads = GetStoredUploads(information.UniqueId);
var entity = db.Set<T>().Include(e => e.Uploads)
.Single(e => e.UniqueId == information.UniqueId);
entity.Uploads.AddRange(uploads);
...
}
Было бы хорошо, чтобы быть в состоянии пройти метод работы, который требует параметра типа в качестве делегата на выключатель вызовов методов работы.
public bool DoSomeWork(delegateMethod, information) {
switch(information.Type) {
case UploadTypes.AutoInciden:
return delegateMethod<AutoIncident>(information);
...
}
}
Это можно сделать? Кроме того, мне не удалось создать хороший заголовок для этого вопроса, поэтому, пожалуйста, прокомментируйте, если это лучший способ описать проблему.
Если метод DoSomeWork уже содержит ссылку на правильный метод (с использованием 'delegateMethod'), почему' s ведьма' снова? – haim770
Я звоню из уровня, который не имеет доступа к этим типам. – jwize