我编写了一个相当简单的转换类,它将import { Injectable } from '@angular/core';
@Injectable()
export class StorageService {
public setItem(key: string, data: any) {
sessionStorage.setItem(key, JSON.stringify(data));
}
public getItem(key: string) {
if (!!sessionStorage.getItem(key)) {
return sessionStorage.getItem(JSON.parse(key));
} else {
return false;
}
}
public clear() {
sessionStorage.clear();
return true;
}
public removeItem(key: string) {
sessionStorage.removeItem(key);
return true;
}
}
转换为Foo
。
因为我想为其他类使用多个转换器,所以我已经设置了一个包含两种方法的接口:
Bar
我的班级就是这样实现的:
public interface IConverter<in TSource, out TDestination>
{
TDestination Convert(TSource sourceObject);
IEnumerable<TDestination> ConvertMany(IEnumerable<TSource> sourceObjects);
}
哪一切都很精彩。我想添加另一个public class ObjectConverter : IConverter<Foo, Bar>
{
public Bar Convert(Foo sourceObject)
{
return new Bar
{
// Mapping attributes...
};
}
public IEnumerable<Bar> ConvertMany(IEnumerable<Foo> sourceObjects)
{
return sourceObjects.Select(obj => new Bar
{
// Mapping attributes...
});
}
}
方法,该方法将另一个对象作为源并将其作为ConvertMany
返回。将它添加到此类是否可以,因为它也返回Bar
或者这是否更适合同样实现此接口的第二个类?
我对C#很新,并且使用接口,所以我不确定什么会更好。
(侧面说明,这有什么意义吗?还有更好的选择吗?)
答案 0 :(得分:2)
您应该添加界面的另一个实现来实现预期的结果:
public interface IConvertFromMany<TSource, TDestination>
{
IEnumerable<TDestination> ConvertMany(IEnumerable<TSource> sourceObjects);
}
public interface IConverter<TSource, TDestination> : IConvertFromMany<TSource, TDestination>
{
TDestination Convert(TSource sourceObject);
}
使用它像:
public class ObjectConverter : IConverter<Foo, Bar>, IConvertFromMany<AnotherSourceObject, Bar>
{
//....your implementations here
}