Сиэль, У меня была эта проблема совсем недавно , и я нашел ваш вопрос, когда искал ответ.
В основном вы должны использовать типизированную фабрику для разрешения ваших компонентов во время выполнения в вашем компоненте упаковки. Фабрика должна возвращать объект по умолчанию, если нет совпадения с компонентом, который вы ищете, объект по умолчанию, который будет реализовывать любое необходимое поведение.
В случае IMembershipService
, реализуйте класс NotCheckingMembershipService
, наследующий интерфейс и ничего не делающий, и установите его по умолчанию для компонентов, которым он не нужен. Более конкретные службы членства могут быть связаны с конкретными контроллерами.
Для этого вы должны создать универсальную "всеобъемлющую" реализацию
public class NotCheckingMembershipService<T>: IMembershipService<T> where T: Controller
{
}
И зарегистрировать его как компонент по умолчанию для открытия IMembershipService
_container.Register(
Component.For(typeof(IMembershipService<>))
.ImplementedBy(typeof(NotCheckingMembershipService<>))
.IsDefault());
Тогда просто зарегистрируйте свои пользовательские сервисы членства, где это необходимо. Решение не будет неудачным, и вы всегда сможете вызвать интерфейс.