У меня есть несколько интерфейсов
public interface IViewModelBuilder<in TView>
{
void Build(TView model);
}
public interface IViewModelBuilder<in TInput, out TView>
{
TView Build(TInput input);
}
public interface IViewModelSaver<in TService, in TView>
{
//bool Save(TView model);
void Save<T>(TView model) where T: TService;
}
, и реализация этих интерфейсов
public class SummaryViewModelBuilder :
IViewModelBuilder<SummaryViewModel>
, IViewModelSaver<ICustomerQueryService, SummaryViewModel>
, IViewModelSaver<ISmallBussinessService, SummaryViewModel>
{
public void Build(SummaryViewModel model)
{
model.Status = "Done " + model.ResellerId;
}
void IViewModelSaver<ICustomerQueryService, SummaryViewModel>.Save<T>(SummaryViewModel model)
{
Console.WriteLine("ICustomerQueryService");
}
void IViewModelSaver<ISmallBussinessService, SummaryViewModel>.Save<T>(SummaryViewModel model)
{
Console.WriteLine("ISmallBussinessService");
}
}
прекрасно работает с соглашениями Ninject, такими как
kernel.Bind(x =>
x.FromThisAssembly().SelectAllClasses().InheritedFrom(typeof(IViewModelBuilder<>))
.BindSingleInterface());
kernel.Bind(x =>
x.FromThisAssembly().SelectAllClasses().InheritedFrom(typeof(IViewModelBuilder<,>))
.BindSingleInterface());
kernel.Bind(x =>
x.FromThisAssembly().SelectAllClasses().InheritedFrom(typeof(IViewModelSaver<,>))
.BindSingleInterface());
, но толькоесли класс реализует один интерфейс означает только один из связанных, в этом примере я получаю исключение «Последовательность содержит более одного элемента», как предотвратить это исключение, я также знаю о SRP, но это связанный метод и яне хочу реализовывать в отдельных классах.