2016-02-16 5 views
0

Есть ли способ в Autofac зарегистрировать singleton как два разных интерфейса?Autofac register singleton дважды

Например:

interface ILayer {} 
interface ILogicLayer{} 
class LogicLayer : ILayer, ILogicLayer{ 
} 

Я хочу зарегистрировать LogicLayer как одного экземпляра как в ILayer и ILogicLayer? Как я могу это сделать?

ответ

1

Просто идти вперед и:

var builder = new ContainerBuilder(); 
var layer = new LogicLayer(); 
builder.RegisterInstance(layer).As<ILayer>(); 
builder.RegisterInstance(layer).As<ILogicLayer>(); 
+0

Недостатком этого approcah является то, что LogicLayer должен быть создан при регистрации AutoFac, которые следует избегать, особенно если LogicLayer имеет свои собственные зависимости, которые требуют инъекций. – Igor

+0

Абсолютно, в тех случаях подход Маартенса лучше –

3

Это должно сделать трюк:

var builder = new ContainerBuilder(); 
builder.RegisterType<LogicLayer>() 
    .As<ILayer>() 
    .As<ILogicLayer>() 
    .SingleInstance(); 
Смежные вопросы