Если у меня есть следующие настройки:
public interface IUsersQuery{}
public class UsersQuery : IUsersQuery {}
public interface ICompanyQuery{}
public class CompanyQuery : ICompanyQuery {}
Можно ли автоматически зарегистрировать весь IABCQuery и соответствующую ему реализацию ABCQuery за один раз вместо одного за другим:
container.Regsiter(
Component.For<ICompanyQuery>().ImplementedBy<CompanyQuery>(),
Component.For<IUsersQuery>().ImplementedBy<UsersQuery>()
)
Я подумал, может быть, если я добавлю какой-нибудь маркер в интерфейсы,
public interface IEnhancedQuery {}
public interface IUsersQuery : IEnhanceQuery {}
public interface ICompanyQuery : IEnhancedQuery {}
тогда, возможно, я смогу это сделать, но мне трудно найти способ зарегистрировать их всех с автоматической регистрацией через AllTypes.
container.Register(AllTypes.FromThisAssembly().BasedOn<IEnhancedQuery>());
var iQueries = container.ResolveAll<IEnhancedQuery>();
foreach (IEnhancedQuery p in iQueries)
{
var actualInterface = // how to get the actual interface type of p;
// would the following work?
container.Register(Component.For(actualInterface)
.ImplementedBy(AllTypes.FromThisAssembly().BasedOn(actualInterface)
.WithService.FirstInterface()));
}