strucutreMap Внедрение зависимостей не работает

В моем приложении я настроил структуру карты как

 public class DefaultRegistry : Registry {
        #region Constructors and Destructors

        public DefaultRegistry() {
            Scan(
                scan => {
                    scan.Assembly("Eterp.Data.ErpCore");
                    scan.Assembly("Eterp.Data.Seed");
                    scan.Assembly("Eterp.Application.ErpCore");
                    scan.TheCallingAssembly();
                    scan.WithDefaultConventions();
                });


            ForConcreteType<AclAuthorizationManager>().Configure.Ctor<IResourceOperationAppService>()
        }

        #endregion
    }

И у меня есть класс

public class AclAuthorizationManager : ClaimsAuthorizationManager
    {
        private readonly IResourceOperationAppService _resourceOperationAppService;



        public AclAuthorizationManager(IResourceOperationAppService resourceOperationAppService)
        {
            _resourceOperationAppService = resourceOperationAppService;
        }

        public override bool CheckAccess(AuthorizationContext context)
        {
            var isCurrentUserAuthorized = context.Principal.Identity.IsAuthenticated;

            return isCurrentUserAuthorized && _resourceOperationAppService.CanAccessResource(context.Action.FirstOrDefault().Value, context.Principal.Claims);
        }
    }

Этот класс является пользовательским классом авторизации утверждений, использующимся в моем приложении, но когда я исключаю приложение, я получаю ошибку, связанную с отсутствием параметра, требуемого конструктором (этот класс имеет конструктор с типом параметра IResourceOperation). но я уже настроил все детали в StructureMap . Я уверен, что моя конфигурация структуры карты работает на 100%, ожидайте создания этого класса AclAuthorizationManager. Потому что я могу применять DI в других классах.

Что не так в моем коде?

1 ответ

По моему опыту при указании конструктора типа надо сказать, что наследует от интерфейса.

Поэтому вы должны заменить эту строку:

ForConcreteType<AclAuthorizationManager>().Configure.Ctor<IResourceOperationAppService>()

От:

ForConcreteType<AclAuthorizationManager>().Configure.Ctor<IResourceOperationAppService>().Is<ResourceOperationAppService>()

Где находится реализация ResourceOperationAppService IResourceOperationAppService.

Другие вопросы по тегам