Esempio n. 1
0
        public static void RegisterByAttribute(this IUnityContainer container, bool mockMode, params Assembly[] assemblies)
        {
            _container = container;
            _collectionItemsForType = new Dictionary <Type, List <ResolutionItem> >();
            _keysForTypes           = new Dictionary <Type, HashSet <string> >();
            _interceptorWrapper     = CreateInterceptorWrapper();
            _componentResolver      = new UnityComponentResolver(container);

            var scanAndRegisterActions = new List <IList <string> >
            {
                ScanAndRegister <RegisterSingletonAttribute, ContainerControlledLifetimeManager>(mockMode, assemblies),
                ScanAndRegister <RegisterPerRequestAttribute, HttpContextLifetimeManager>(mockMode, assemblies),
                ScanAndRegister <RegisterTransientAttribute, TransientLifetimeManager>(mockMode, assemblies),
            };

            var errorMessages = scanAndRegisterActions.SelectMany(msg => msg).ToList();

            ContainerAttributeUtils.ThrowIfError(errorMessages);
        }
Esempio n. 2
0
        private static void EnsureNotAlreadyRegistered(RegistrationContext reg)
        {
            var type = reg.IsConcrete ? reg.ToType : reg.FromType;

            if (!_container.IsRegistered(type))
            {
                return;
            }

            var attrName = ContainerAttributeUtils.GetFriendlyName(reg.Attribute);
            var msg      = $"{type}: This type has already been registered";

            if (!reg.IsConcrete)
            {
                msg += $" as {reg.ToType}";
            }
            msg += ". Registrations cannot be overriden.\n" +
                   $"To register a collection of components use to be resolved together use [{attrName}(OfCollection = true)].\n" +
                   $"To register multiple instances of the same type to be resolved individually by key use [{attrName}(Key = MyKey)]";
            throw new RegistrationFailedException(msg);
        }