我有一个代码库,我想同时用于ASP.NET MVC和WPF/MVVM前端。业务对象实现为接口,业务逻辑使用这些接口传递数据。
假设我在接口上有一个实现IEnumerable的属性。是否可能使不同版本的该接口使用不同的IEnumerable实现?以下是我尝试实现的例子:
假设我在接口上有一个实现IEnumerable的属性。是否可能使不同版本的该接口使用不同的IEnumerable实现?以下是我尝试实现的例子:
class Reporting
{
public bool RunReport(IReportParams Params);
}
interface IReportParams
{
IEnumerable<Guid> SelectedItems { get; }
IEnumerable<StatusEnum> SelectedStatuses { get; }
}
class MvcReportParams : IReportParams
{
public List<Guid> SelectedItems { get; set; }
public List<StatusEnum> SelectedStatuses { get; set; }
}
class WpfReportParams : IReportParams
{
public ObservableCollection<Guid> SelectedItems { get; set; }
public ObservableCollection<StatusEnum> SelectedStatuses { get; set; }
}
这能做到吗?
编辑:我应该也问“怎么做”,因为当我尝试这样做时,我会遇到类似于以下错误:
“MvcReportParams”未实现接口成员“IReportParams.SelectedStatuses”。“MvcReportParams.SelectedStatuses”无法实现“IReportParams.SelectedStatuses”,因为它没有匹配的返回类型“System.Collections.Generic.IEnumerable”。
ObservableCollection和List都绝对实现了IEnumerable,所以这对我来说似乎不合理。
最后编辑
好吧,有人回答了我的问题,但他们出于某种原因删除了它,所以我无法将其标记为解决方案。这是我最终做的事情:
interface IReportParams
{
IEnumerable<Guid> SelectedItems { get; }
IEnumerable<StatusEnum> SelectedStatuses { get; }
}
class MvcReportParams : IReportParams
{
// Properties that the modelbinder dims and sets up
public List<Guid> SelectedItems { get; set; }
public List<StatusEnum> SelectedStatuses { get; set; }
// Explicityly implement my interface
IEnumerable<Guid> IReportParams.SelectedItems
{
get { return SelectedItems; }
}
IEnumerable<StatusEnum> IReportParams.SelectedStatuses
{
get { return SelectedStatuses; }
}
}
class WpfReportParams : IReportParams
{
// Properties that my view dims and modifies
public ObservableCollection<Guid> SelectedItems { get; set; }
public ObservableCollection<StatusEnum> SelectedStatuses { get; set; }
// Explicityly implement my interface
IEnumerable<Guid> IReportParams.SelectedItems
{
get { return SelectedItems; }
}
IEnumerable<StatusEnum> IReportParams.SelectedStatuses
{
get { return SelectedStatuses; }
}
}
虽然需要编写更多的样板代码,但我仍然更喜欢更加明确。
SelectedItems
和SelectedStatuses
设置器。 - Kamyar