Пример #1
0
        public void Register(ContainerBuilder builder, ITypeFinder typeFinder, CopterConfig config)
        {
            builder.RegisterType <DefaultPublisher>().As <IPublisher>();

            List <Type> subscribers = typeFinder.FindClassesOfType(typeof(ISubscriber <>)).ToList();

            foreach (Type subscriber in subscribers)
            {
                builder.RegisterType(subscriber)
                .As(subscriber.FindInterfaces((type, criteria) =>
                {
                    bool isMatch = type.IsGenericType && ((Type)criteria).IsAssignableFrom(type.GetGenericTypeDefinition());
                    return(isMatch);
                }, typeof(ISubscriber <>))).InstancePerLifetimeScope();
            }
        }
Пример #2
0
        protected override void RegisterDependencies(CopterConfig config)
        {
            ContainerBuilder builder   = new ContainerBuilder();
            IContainer       container = builder.Build();

            ContainerManager = new WebApiContainerManager(container);

            //we create new instance of ContainerBuilder
            //because Build() or Update() method can only be called once on a ContainerBuilder.
            builder = new ContainerBuilder();

            ITypeFinder typeFinder = new WebTypeFinder();

            if (config != null)
            {
                builder.RegisterInstance(config).As <CopterConfig>().SingleInstance();
            }
            builder.RegisterInstance(this).As <IEngine>().SingleInstance();
            builder.RegisterInstance(typeFinder).As <ITypeFinder>().SingleInstance();

            IEnumerable <Type>          dependencyTypes = typeFinder.FindClassesOfType <IDependencyRegistrar>();
            List <IDependencyRegistrar> dependencies    = new List <IDependencyRegistrar>();

            foreach (Type type in dependencyTypes)
            {
                IDependencyRegistrar item = (IDependencyRegistrar)Activator.CreateInstance(type);
                dependencies.Add(item);
            }

            dependencies = dependencies.AsQueryable().OrderBy(x => x.Order).ToList();
            foreach (IDependencyRegistrar dependency in dependencies)
            {
                dependency.Register(builder, typeFinder, config);
            }

            builder.Update(container);

            // 注册到 webapi 容器
            HttpConfiguration   configuration = GlobalConfiguration.Configuration;
            IDependencyResolver resolver      = new AutofacWebApiDependencyResolver(ContainerManager.Container);

            configuration.DependencyResolver = resolver;
        }