Наши репозитории на работе, как правило, CRUD, разбитые на одно из ICreatable
, IRetrievable
, IUpdatable
и IDeletable
. Поведение извлечения использует PK объекта в своем извлечении. Зачастую мы получим еще один подчиненный интерфейс для обработки методов вне поведения CRUD для хранилища. Это выглядит так:
public interface IUserRepository : ICreatable<User>, IRetrievable<User>, IUpdatable<User>
{
IEnumerable<User> GetUsersWithoutEmail ();
}
public class UserRepository : IUserRepository
{
// implement members...
}
В местах, где нам конкретно нужно GetUsersWithoutEmail
, мы добавим IUserRepository. Где-то еще, которому нужно IRetrievable<User>
, в настоящее время получается IUserRepository
, потому что я не знаю, как решить эту проблему.
То, что я хотел бы сделать, это что-то похожее на это:
ObjectFactory.Initialize (x => x.For<IUserRepository> ().IncludeBaseInterfaces ().Use <UserRepository> ());
Я хочу получить UserRepository
, когда я запрашиваю IUserRepository
или IRetrievable<User>
, без необходимости конфигурировать каждый из 4 вручную. Я хотел бы иметь возможность переопределить один, если я решу, что ICreatable<User>
должен быть CreatableUserRepository
вместо этого, но обычно я просто хочу, чтобы он поднимался по дереву как можно дальше.
Это выполнимо?