Сканирование сборок Autofac с интерфейсами ⇐ C#
-
Гость
Сканирование сборок Autofac с интерфейсами
Проект создан с использованием .NET 7 MVC.
Я создал 3 интерфейса в своей библиотеке классов «Приложение». Я реализую эти интерфейсы в других своих интерфейсах или классах.
Я хочу, чтобы зависимости автоматически разрешались путем сканирования сборки, например, если интерфейс или класс реализует «ITransientLifetime», тогда он должен разрешаться как «InstancePerDependency». Если какой-либо класс или интерфейс имеет «ISingletonLifetime», то он должен разрешаться как Singleton Lifetime.
Ниже представлена архитектура моего проекта. Архитектура проекта
Вот мой код из библиотеки классов приложения.
ISingletonLifetime.cs
публичный интерфейс ISingletonLifetime { } ITransientLifetime.cs
публичный интерфейс ITransientLifetime { } IEmailSender.cs
публичный интерфейс IEmailSender: ISingletonLifetime { void SendEmail (строка электронной почты); } EmailSender.cs
публичный класс EmailSender: IEmailSender { public void SendEmail (строка электронной почты) { выбросить новое NotImplementedException(); } } А вот код из «Mvcapp»
AutofacIocContainer.cs
публичный класс AutofacIocContainer: Модуль { частный только для чтения Тип singletonInterface = typeof(ISingletonLifetime); частный только для чтения Тип transientInterface = typeof(ITransientLifetime); защищенное переопределение void Load (конструктор ContainerBuilder) { вар сборки = AppDomain.CurrentDomain.GetAssemblies(); строитель .RegisterAssemblyTypes(сборки) .Where(t => t.GetInterfaces().Any(i => i.IsAssignableFrom(transientInterface))) .AsImplementedInterfaces() .InstancePerDependency(); base.Load(строитель); } } Program.cs
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); builder.Host.ConfigureContainer(containerBuilder => { ContainerBuilder.RegisterModule(новый AutofacIocContainer()); }) Может ли кто-нибудь помочь мне в этом? Эта ссылка — то же самое, что я ищу, но я не могу разрешить свою зависимость IEmailSender. Я получаю ошибку ниже:
InvalidOperationException: невозможно разрешить службу для типа «Application.Interfaces.IEmailSender» при попытке активировать «MvcAppCore.Controllers.HomeController».
Также я думаю, как справиться со сценарием, как показано ниже:
Тест общедоступного класса: ISingletonLifetime, ITransientLifetime { } Спасибо
Проект создан с использованием .NET 7 MVC.
Я создал 3 интерфейса в своей библиотеке классов «Приложение». Я реализую эти интерфейсы в других своих интерфейсах или классах.
Я хочу, чтобы зависимости автоматически разрешались путем сканирования сборки, например, если интерфейс или класс реализует «ITransientLifetime», тогда он должен разрешаться как «InstancePerDependency». Если какой-либо класс или интерфейс имеет «ISingletonLifetime», то он должен разрешаться как Singleton Lifetime.
Ниже представлена архитектура моего проекта. Архитектура проекта
Вот мой код из библиотеки классов приложения.
ISingletonLifetime.cs
публичный интерфейс ISingletonLifetime { } ITransientLifetime.cs
публичный интерфейс ITransientLifetime { } IEmailSender.cs
публичный интерфейс IEmailSender: ISingletonLifetime { void SendEmail (строка электронной почты); } EmailSender.cs
публичный класс EmailSender: IEmailSender { public void SendEmail (строка электронной почты) { выбросить новое NotImplementedException(); } } А вот код из «Mvcapp»
AutofacIocContainer.cs
публичный класс AutofacIocContainer: Модуль { частный только для чтения Тип singletonInterface = typeof(ISingletonLifetime); частный только для чтения Тип transientInterface = typeof(ITransientLifetime); защищенное переопределение void Load (конструктор ContainerBuilder) { вар сборки = AppDomain.CurrentDomain.GetAssemblies(); строитель .RegisterAssemblyTypes(сборки) .Where(t => t.GetInterfaces().Any(i => i.IsAssignableFrom(transientInterface))) .AsImplementedInterfaces() .InstancePerDependency(); base.Load(строитель); } } Program.cs
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); builder.Host.ConfigureContainer(containerBuilder => { ContainerBuilder.RegisterModule(новый AutofacIocContainer()); }) Может ли кто-нибудь помочь мне в этом? Эта ссылка — то же самое, что я ищу, но я не могу разрешить свою зависимость IEmailSender. Я получаю ошибку ниже:
InvalidOperationException: невозможно разрешить службу для типа «Application.Interfaces.IEmailSender» при попытке активировать «MvcAppCore.Controllers.HomeController».
Также я думаю, как справиться со сценарием, как показано ниже:
Тест общедоступного класса: ISingletonLifetime, ITransientLifetime { } Спасибо
Мобильная версия