ASP Boilerplate - как работает ITransient - PullRequest
0 голосов
/ 15 марта 2019

Насколько я понимаю, в abp, когда класс реализует интерфейс ITransient, он автоматически регистрируется в системе внедрения зависимостей.

Когда я создаю новый проект в ASPNetZero, а класс реализует ITransientЯ не могу внедрить указанный класс в другие проекты, например, Приложение

Использование следующего фрагмента не позволяет мне использовать инжектор конструктора.

public interface ITrackAppService : ITransientDependency

public class TrackAppService : ITrackAppService

Но когда я его регистрирую (Даже если классне реализует ITransient), тогда я могу использовать инжектор конструктора.

IocManager.RegisterIfNot<ITrack, Track>();

Я ошибочно понял, как работает ITransient?Как использовать Itransient, чтобы можно было использовать инжекцию зависимости конструктора?

Примечание. Класс, который я пытаюсь внедрить в проект Application, находится в другом проекте, который я создал.

1 Ответ

0 голосов
/ 15 марта 2019

Если вы внедряете интерфейс в новый проект, вы не можете использовать его таким образом, из коробки. Потому что ваш новый проект не знает ваших зависимостей. Каждый новый проект, который использует DI, должен быть установлен как AbpModule.

См. Пример объявления модуля.

[DependsOn(typeof(MyBlogCoreModule))]
public class MyBlogApplicationModule : AbpModule
{
    public override void Initialize()
    {
        IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
    }
}

Обратите внимание на атрибут [DependsOn] класса. Это помогает зарегистрировать проект в DI.

Итак, что вам нужно сделать, это

  1. Создайте новый класс в новом проекте, как я показал вам выше.
  2. Добавьте атрибут [DependsOn(typeof(YourApplicationServiceModule))] к этому новому модулю.
...