Сканирование сборок Autofac с интерфейсамиC#

Место общения программистов 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 { } Спасибо
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»