Контейнер Unity DI, нужно ли container.Resolve <> вызываться в любом месте базы кода - PullRequest
0 голосов
/ 15 июня 2019

У меня консольное приложение. Я зарегистрировал все типы (12К классов) в моем приложении в контейнер. Чтобы DI имел место, нужно ли мне делать container.Resolve <> везде в моей кодовой базе вместо использования new () или я делаю container.Resolve <> только в классе точки входа.

Я пробовал только класс точки входа, и DI не произошло в классе 2 уровня ниже класса точки входа (в частности, внедрение свойства [Dependency]) не происходит.

1 Ответ

0 голосов
/ 16 июня 2019

вы можете использовать класс запуска и настроить контейнер IOC в этом классе. Вы можете использовать интерфейс маркера (пожалуйста, найдите шаблон интерфейса маркера в google), чтобы разрешить все классы, которые есть в вашем проекте, для реализации внедрения зависимости в ваши классы.если вам нужен конкретный интерфейс, когда он существует в конкретном конструкторе классов, вы должны использовать DI и зарегистрировать весь интерфейс в своем приложении, прежде чем приложение запустит ваш код.Я думаю, что этот код может помочь вам: этот код с Autofac:

builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerLifetimeScope();

Assembly serviceLayerAssembly = typeof(IUserServices).Assembly;

        builder.RegisterAssemblyTypes(assemblies: serviceLayerAssembly)
            .AssignableTo<IMarkedServiceInterface>().AsImplementedInterfaces().InstancePerLifetimeScope();

        builder.RegisterAssemblyTypes(assemblies: serviceLayerAssembly)
            .AssignableTo<IMarkedMapperInterface>().AsImplementedInterfaces().InstancePerLifetimeScope();
...