Я использую Autofac, и я не мастер IoC.Зарегистрируйте несколько интерфейсов, которые имеют явную реализацию в одном экземпляре
Рассмотрим такой сценарий:
public interface IBeforeRequestTask
{
void Execute();
}
public interface IAfterRequestTask
{
void Execute();
}
public class TaskExecutor : IBeforeRequestTask, IAfterRequestTask
{
void IBeforeRequestTask.Execute()
{
// code
}
void IAfterRequestTask.Execute()
{
// code
}
}
Таким образом, мы имеем явные реализации. Как бы вы зарегистрировали эти интерфейсы?
Я думаю, что мы не можем сделать это:
builder.RegisterType<IBeforeRequestTask> ...
builder.RegisterType<IAfterRequestTask> ...
Я прочитал в Autofac Registration Docs, что мы должны зарегистрировать конкретные типы.
Аналогичный вопрос, но не лечение Autofac это одна: TinyIoC: Register multiple interfaces on a single instance
Ну, я знаю, что это может быть легко, делая 1-1 (один интерфейс на класс, затем зарегистрировать конкретный тип). Но теперь мне это интересно.
Не помню, где я видел что-то вроде кода ниже, используя StructureMap (может быть неправильно):
action.AddTypesOf<IBeforeRequestTask>();
action.AddTypesOf<IAfterRequestTask>();
Надежда Я ясно. Спасибо вам всем.
EDIT
Я создал this образец, чтобы помочь. ;-)
Я не совсем понимаю вопрос. Доступ к членам, использующим интерфейс, осуществляется одинаково, независимо от того, неявно или явно ли они реализованы в действительном типе. Вы заметили разницу или это упреждающий вопрос «давайте выясним это, прежде чем мы начнем это делать»? –
См. [«Если вопросы включают« теги »в их названиях?»] (Http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles), где консенсус «нет, они не должны»! –
Спасибо @AndreasNiedermair ... :-) - Молодец. И я узнал. +1 для обучения правильному пути задавать вопросы (я только читаю, что появляется, когда я печатаю вопрос, такие вещи, как похожие вопросы и т. Д.). –