ASP Boilerplate - как работает ITransient

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

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

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

public interface ITrackAppService : ITransientDependency

public class TrackAppService : ITrackAppService

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

IocManager.RegisterIfNot<ITrack, Track>();

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

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

1 ответ

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

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

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

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

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

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