我不確定這是否可能,我可能需要爲每個實現編寫擴展方法。下面是一些示例代碼:擴展方法返回接口的正確實現嗎?
public interface IBaseService<T>
{
IUnitOfwork UnitOfWork {get;}
}
public interface IService<T>: IBaseService<T>
{
IEnumerable<T> GetAll();
T GetById(Guid id);
}
public interface IUserService: IService<User>
{
User FindByUsernameAndPassword(string username, string password)
}
public class BaseService<T>: IService<T>
{
public BaseService(IRepository<T> repository)
{
_repository = repository
}
public virtual IEnumerable<T> GetAll(){....};
public virtual T GetById(Guid id){....};
IUnitOfWork UnitOfWork {get {return _repository.UnitOfWork;}}
}
public class UserService: BaseService<User>, IUserService
{
...
}
public static class ServiceExtensions
{
public static IBaseService<T> EnableLazyLoading<T>(this IBaseService<T> service, bool lazyLoad = True)
{
service.UnitOfWork.EnableLazyLoad(lazyLoad);
return service;
}
}
因此,假設我正在使用UserService。當我打電話的擴展方法上UserService,是有可能有它返回IBaseService的正確執行或做我需要爲每個執行?:
實例創建和擴展方法:
userService.EnableLazyLoading(false).FindByUsernameAndPassword("ddivita","123456")
所以,澄清,你是說你想要它創建一個新的版本,無論它被稱爲? –
我只想編寫一個擴展方法供IBaseServcie的所有實現使用,以便返回正確的實現。在我的例子中,我想找出一種方法來在我調用EnableLazyLoading擴展時返回IUserService。 –
DDiVita
哦!我明白了,所以你希望它返回被調用的特定類型,而不是創建它的新實例。 –