Пример #1
0
        /// <summary>
        /// Extension with key parameter.
        /// </summary>
        /// <param name="ServiceProvider"></param>
        /// <param name="typeService">Type</param>
        /// <param name="key">Key</param>
        /// <returns>The object or default.</returns>
        public static object GetService(this ServiceProvider ServiceProvider, Type typeService, string key)
        {
            IEnumerable <object> typesList = ServiceProvider.GetServices(typeService);
            object objectServiceSearch     = InjectionFactory.GetValueOrDefault(key);

            return(typesList.Where(x => x.GetType().Equals(objectServiceSearch)).FirstOrDefault());
        }
Пример #2
0
        public InjectionFactoryTests()
        {
            _container = Substitute.For <IContainer>();
            _container.GetInstance <object>().Returns(new object());

            _sut = new InjectionFactory <object>(_container);
        }
Пример #3
0
        public static void RegisterComponents()
        {
            var container = new UnityContainer();

            var locator = new UnityServiceLocator(container);

            ServiceLocator.SetLocatorProvider(() => locator);

            GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);

            container.RegisterType <UserService>();
            container.RegisterType <StudentService>();
            container.RegisterType <StudentSubjectService>();

            ////NHIBERNATE
            //container.RegisterType<DataAccess.Nhibernate.UnitOfWork>(new PerRequestLifetimeManager());
            //var factoryNH = new InjectionFactory(x => x.Resolve<DataAccess.Nhibernate.UnitOfWork>());
            //container.RegisterType<IUnitOfWork>(factoryNH);
            //container.RegisterType<IRepository<User>, DataAccess.Nhibernate.Repository<User>>();
            //container.RegisterType<IRepository<Student>, DataAccess.Nhibernate.Repository<Student>>();
            //container.RegisterType<IRepository<StudentSubject>, DataAccess.Nhibernate.Repository<StudentSubject>>();
            //container.RegisterType<IRepository<Subject>, DataAccess.Nhibernate.Repository<Subject>>();

            //ENTITY FRAMEWORK
            container.RegisterType <DataAccess.EntityFramework.UnitOfWork>(new PerRequestLifetimeManager());
            var factoryEF = new InjectionFactory(x => x.Resolve <DataAccess.EntityFramework.UnitOfWork>());

            container.RegisterType <IUnitOfWork>(factoryEF);
            container.RegisterType <IRepository <User>, DataAccess.EntityFramework.Repository <User> >();
            container.RegisterType <IRepository <Student>, DataAccess.EntityFramework.Repository <Student> >();
            container.RegisterType <IRepository <StudentSubject>, DataAccess.EntityFramework.Repository <StudentSubject> >();
            container.RegisterType <IRepository <Subject>, DataAccess.EntityFramework.Repository <Subject> >();
        }
Пример #4
0
        public void V1_通過驗證且不是Admin角色()
        {
            var    calculation = InjectionFactory.Create();
            Action action      = () => { calculation.Execute(1, 1); };

            action.ShouldThrow <Exception>().WithMessage("*Admin*");
        }
Пример #5
0
        public void ConfigureServices(IServiceCollection services)
        {
            InjectionFactory.ConfigureAPI(services, Configuration);

            var mappingConfig = new MapperConfiguration(mc =>
            {
                mc.AddProfile(new MappingProfiler());
            });

            IMapper mapper = mappingConfig.CreateMapper();

            services.AddSingleton(mapper);

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);

            services.AddSwaggerGen(s =>
            {
                s.SwaggerDoc("v1", new OpenApiInfo
                {
                    Version     = "v1",
                    Title       = "Casa dos Cupons",
                    Description = "API para controle de cupons de desconto.",
                    Contact     = new OpenApiContact {
                        Name = "Matheus Chielle", Email = "*****@*****.**"
                    }
                });
            });
        }
Пример #6
0
        public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequestMessage req, TraceWriter log)
        {
            var employeesDataProvider = InjectionFactory.GetIEmployeeDataProvider();
            var httpResponseCreator   = InjectionFactory.GetIHttpResponseCreator();

            var employees = await employeesDataProvider.GetEmployees();

            return(httpResponseCreator.CreateHttpResponse(req, HttpStatusCode.OK, employees));
        }
Пример #7
0
        public void V1_通過驗證且是Admin角色_調用Execute_預期得到例外()
        {
            Thread.CurrentPrincipal =
                new GenericPrincipal(new GenericIdentity("Administrator"),
                                     new[] { "Admin" });
            var    calculation = InjectionFactory.Create();
            Action action      = () => { calculation.Execute(1, 1); };

            action.ShouldThrow <Exception>().WithMessage("*喔喔*");
        }
Пример #8
0
        public void Setup()
        {
            _httpResponseCreator  = Mock.Of <IHttpResponseCreator>();
            _employeeDataProvider = Mock.Of <IEmployeeDataProvider>();

            _traceWriter = new TraceWriterFake();

            InjectionFactory.UseIHttpResponseCreator(_httpResponseCreator);
            InjectionFactory.UseIEmployeeDataProvider(_employeeDataProvider);
        }
Пример #9
0
        public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestMessage req, TraceWriter log)
        {
            var employeeDataProvider = InjectionFactory.GetIEmployeeDataProvider();
            var httpResponseCreator  = InjectionFactory.GetIHttpResponseCreator();

            var newEmployee = await req.Content.ReadAsAsync <Employee>();

            await employeeDataProvider.AddEmployee(newEmployee);

            return(httpResponseCreator.CreateHttpResponse(req, HttpStatusCode.OK, newEmployee));
        }
Пример #10
0
        public static void RegisterMediaWriters(IUnityContainer container)
        {
            var factory = new InjectionFactory(c => new Func <string, IDicomMediaWriter> (name => c.Resolve <IDicomMediaWriter>(name)));

            container.RegisterType <IDicomMediaWriter, NativeMediaWriter>       (MimeMediaTypes.DICOM);
            container.RegisterType <IDicomMediaWriter, JsonMediaWriter>         (MimeMediaTypes.Json);
            container.RegisterType <IDicomMediaWriter, XmlMediaWriter>          (MimeMediaTypes.xmlDicom);
            container.RegisterType <IDicomMediaWriter, UncompressedMediaWriter> (MimeMediaTypes.UncompressedData);
            container.RegisterType <IDicomMediaWriter, JpegMediaWriter>          (MimeMediaTypes.Jpeg);
            container.RegisterType <Func <string, IDicomMediaWriter> > (factory);
            container.RegisterType <IDicomMediaWriterFactory, DicomMediaWriterFactory> ( );
            //TODO: should not be needed when we find out why unity select a constructor that it can't build when there is a defualt
            container.RegisterType <IJsonDicomConverter, JsonDicomConverter> ( );
        }
Пример #11
0
        /// <summary>
        /// Enregistre un service distant.
        /// </summary>
        /// <param name="contractType">Type de l'interface représentant le contrat.</param>
        public void RegisterRemoteService(Type contractType)
        {
            if (contractType == null)
            {
                throw new ArgumentNullException("contractType");
            }

            if (!contractType.IsInterface)
            {
                throw new ArgumentException("contractType " + contractType.FullName + "must define an interface.");
            }

            ILog log = LogManager.GetLogger("Kinetix.Application");

            if (log.IsDebugEnabled)
            {
                log.Debug("Enregistrement du service distant " + contractType.FullName);
            }

            /* REMARQUE : on ne peut pas appeler HasWcfClientEndPoint à l'enregistrement car web.config n'est pas accessible. */
            InterceptionPipelineEventArgs args = new InterceptionPipelineEventArgs(contractType, new List <InjectionMember> {
                new Interceptor <InterfaceInterceptor>(),
                new InterceptionBehavior <LogInterceptionBehavior>(),
                new InterceptionBehavior <AnalyticsInterceptionBehavior>()
            });

            if (this.RegisteringInterceptors != null)
            {
                this.RegisteringInterceptors(this, args);
            }

            var remoteServiceFactory = new InjectionFactory(container => {
                /* TODO VERSION TEMPORAIRE : il faut faire un dispose sur la factory quand le service n'est plus utilisé. */
                try {
                    ChannelFactory factory;
                    var instance = GetRemoteService(contractType, out factory);
                    return(instance);
                } catch (Exception ex) {
                    log.Error($"Erreur à l'instancation du service WCF distant {contractType}", ex);
                    throw ex;
                }
            });

            _container.RegisterType(contractType, remoteServiceFactory);
        }
Пример #12
0
        public void Initialize()
        {
            container.RegisterType <IMyApplication, MyApplication>();
            container.RegisterType <IBusinessLogic, BusinessLogic>();
            container.RegisterType <IPaymentService, PayPalPaymentService>();
            container.RegisterType <IWidgetRepository, CachedWidgetRepository>(new InjectionMember[] { new InjectionConstructor(new SqlWidgetRepository()) });

            // http://stackoverflow.com/a/24374652/100534
            var cachedRepositoryFactory = new InjectionFactory((ctr, type, str) =>
            {
                var genericType     = type.GenericTypeArguments[0];
                var sqlRepoType     = typeof(SqlRepository <>).MakeGenericType(genericType);
                var sqlRepoInstance = Activator.CreateInstance(sqlRepoType);
                var cachedRepoType  = Activator.CreateInstance(type, sqlRepoInstance);
                return(cachedRepoType);
            });

            container.RegisterType(typeof(IRepository <>), typeof(CachedRepository <>), new InjectionMember[] { cachedRepositoryFactory });
        }
Пример #13
0
        private void RegisterUsersProcessor()
        {
            var nlogInjectionFactory = new InjectionFactory(container => GetLoggerFactory(GetAbsolutePath(UsersNlogConfigName)));

            Container.RegisterType <IPrtgNLogFactory>(UsersNlogConfigName, new ContainerControlledLifetimeManager(), nlogInjectionFactory);

            var assemblyType      = typeof(UsersProcessor);
            var logger            = Container.Resolve <IPrtgNLogFactory>(UsersNlogConfigName).GetLogger(assemblyType);
            var prtgErrorsHandler = new PrtgErrorsHandler(Container.Resolve <IPrtgNLogFactory>(UsersNlogConfigName));

            Container.RegisterType <IProcessor, UsersProcessor>(
                assemblyType.Name,
                new TransientLifetimeManager(),
                new InjectionFactory(c => new UsersProcessor(
                                         logger,
                                         prtgErrorsHandler,
                                         c.Resolve <ISchedulerCustomerCollection>(),
                                         c.Resolve <Func <IUserSynchronizationService> >())
                                     ));
        }
Пример #14
0
        /// <summary>
        /// Extension from Microsoft.Extensions.DependencyInjection.
        /// This method auto scan all classes with the attribute,<remarks>InjectableAttribute</remarks> and put automatically in the container services.
        /// </summary>
        /// <example>
        /// <code>
        ///   public interface ITest1 {}
        ///
        ///   [InjectableAttribute(typeof(ITest1))]
        ///   public class Class1 : ITest1{ }
        ///
        ///   [InjectableAttribute(typeof(ITest1), DependencyInjectionTypes.Scoped)]
        ///   public class Class1 : ITest1{ }
        ///
        ///   [InjectableAttribute(typeof(ITest1), DependencyInjectionTypes.Scoped, "myClass1")]
        ///   public class Class1 : ITest1{ }
        ///   </code>
        /// </example>
        /// <param name="services"></param>
        /// <param name="assemblies">Assemblies list by comma, or GetEntryAssembly by default</param>
        /// <returns>ISericeCollection to continue the configuration.</returns>
        public static IServiceCollection ScanInjections(this IServiceCollection services, params string[] assemblies)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            InjectionFactory.Clear();

            foreach (Type zclass in CoreUtils.GetListOfTypes(assemblies))
            {
                foreach (var injectable in zclass.GetTypeInfo().GetCustomAttributes <InjectableAttribute>())
                {
                    foreach (var zinterface in zclass.GetTypeInfo().ImplementedInterfaces)
                    {
                        AddInjection(services, injectable.DependencyType, zinterface, zclass);
                        AddInternalInjection(injectable.Name, zclass);
                    }
                }
            }
            return(services);
        }
    static void Main(string[] args)
    {
        var container = new UnityContainer();
        // Define a custom injection factory.
        // It uses reflection to create an object based on the requested generic type.
        var cachedRepositoryFactory = new InjectionFactory((ctr, type, str) =>
        {
            var genericType     = type.GenericTypeArguments[0];
            var sqlRepoType     = typeof(SqlRepository <>).MakeGenericType(genericType);
            var sqlRepoInstance = Activator.CreateInstance(sqlRepoType);
            var cachedRepoType  = Activator.CreateInstance(type, sqlRepoInstance);
            return(cachedRepoType);
        });

        // Register our fancy reflection-loving function for IRepository<>
        container.RegisterType(typeof(IRepository <>), typeof(CachedRepository <>), new InjectionMember[] { cachedRepositoryFactory });
        // Now use Unity to resolve something
        var usesThings = container.Resolve <UsesThings>();

        usesThings.ThingsRepo.Get();     // "Getting object of type 'Things'!"
        usesThings.ThingsRepo.Get();     // "Using cached repository to fetch 'Things'!"
    }
Пример #16
0
        public override void Initialize()
        {
            base.Initialize();

            // This method is called for each installed module on the first stage of initialization.

            // Register implementations:
            var injectionFactory = new InjectionFactory(c => new CustomerReviewRepository(_connectionString, new EntityPrimaryKeyGeneratorInterceptor(), _container.Resolve <AuditableInterceptor>()));

            _container.RegisterType <ICustomerReviewRepository>(injectionFactory);
            _container.RegisterType <ICustomerReviewService, CustomerReviewService>();
            _container.RegisterType <ICustomerReviewSearchService, CustomerReviewSearchService>();

            _container.RegisterType <IProductRatingRepository>(injectionFactory);
            _container.RegisterType <IProductRatingService, ProductRatingService>();
            _container.RegisterType <IProductRaitingCalculator, ProductRaitingCalculator>();

            var eventHandlerRegistrar = _container.Resolve <IHandlerRegistrar>();

            eventHandlerRegistrar.RegisterHandler <CustomerReviewChangedEvent>(async(message, token) => await _container.Resolve <CustomerReviewChangedEventHandler>().Handle(message));

            // Try to avoid calling _container.Resolve<>();
        }
Пример #17
0
 protected void RegisterFactory <T>(InjectionFactory x, string name)
 {
     UnityContainer.RegisterType <T>(name, x);
 }
Пример #18
0
 private static void AddInternalInjection(string key, Type zclass)
 {
     InjectionFactory.Add(key, zclass);
 }