Как избежать использования нового дважды при регистрации в Autofac - PullRequest
0 голосов
/ 07 сентября 2018

Я хочу зарегистрировать две зависимости, используя конструкторы с параметрами, но я хочу только один раз создать 'new' для класса 'Dependency'. Вместо этого:

builder.RegisterInstance(new ClassA(new Dependency())).As<IClassA>().SingleInstance();
builder.RegisterInstance(new ClassB(new Dependency())).AsSelf().SingleInstance();

Я хочу что-то вроде этого:

Dependency dependency = new Dependency();
builder.RegisterInstance(new ClassA(dependency)).As<IClassA>().SingleInstance();
builder.RegisterInstance(new ClassB(dependency)).AsSelf().SingleInstance();

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Если вы сначала зарегистрируете зависимость, она должна автоматически передаваться новым экземплярам, ​​если они этого требуют.

Предположения:

public class ClassA : IClassA
{
    public ClassA(Dependency dependency)
    {
    }
 }

public class ClassB
{
    public ClassB(Dependency dependency)
    {
    }
 }

Тогда зарегистрируйте зависимость

var dependency = new Dependency();
builder.RegisterInstance(dependency).As<Dependency>();
builder.RegisterType<ClassA>().As<IClassA>().SingleInstance();
builder.RegisterType<ClassB>().AsSelf().SingleInstance();
0 голосов
/ 07 сентября 2018

Предполагая, что есть причина, по которой вы хотите создать экземпляр типа, а не регистрировать его в Autofac, который сделает это за вас, вам следует использовать Register вместо RegisterInstance.

builder.RegisterType<Dependency>().As<Dependency>().SingleInstance();
builder.Register(t => new ClassA(t.Resolve<Dependency>())).As<IClassA>().SingleInstance();

Затем вы можете использовать переданный в IComponentContext для разрешения любых необходимых зависимостей. Помните, что с SingleInstance ваш экземпляр создается только один раз, поэтому зависимости должны определяться аналогично (не ожидайте, что зависимость для каждого запроса будет «обновляться» при каждом вызове вашего синглтона).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...