An exception was thrown while activating Castle.Proxies.AppService测试AProxy -> Castle.Proxies.AppServ

今天在是用abp vnext的自动控制器是碰见了个比较坑的地方 报错如下
意思是.net abp 框架依赖注入不能2个service 互相引用
在这里插入图片描述

我的"Appservice测试A"里注入了"Appservice测试B",“Appservice测试B"里边又注入了C,C里边又注入了"A”,通过构造函数的依赖注入都会新建对象

这样是不允许的,会造成死循环,因为A调用B生成B对象 B又去调用C 生成C对象 C里边注入了A A又创建了B,service之间不能相互调用后再注入。也就是说A注入了B B就不能再注入A

解决办法:
循环引用和Abp框架没啥关系,只要两个模块存在互相引用都会出问题,想要解决这个问题,办法就是引入第三者协调,在Abp中,AService和BService互相引用,那么可以通过底层的IServiceProvider来协调,即两个Service注入IServiceProvider 或者 ILazyAbpServiceProvider ,然后通过 service.GetRequiredService(),service.GetRequiredService() 的方式来解耦AB的循环依赖

其实这种方式就是不通过注入了 手动创建对象,如果构造函数没有注入一些其他东西 可以直接new 但如果构造函数有一些其他东西注入就要使用IServiceProvider。

using Microsoft.Extensions.DependencyInjection;
namespace Test
{
    public class AService
    {
        private readonly IServiceProvider _service;
        public AppService(
            IServiceProvider service)
        {
            _service = service;
        }

        [Route("api/get")]
        public async Task<dynamic> GetBasicInfo(string a)
        {
            try
            { 
                var _Bservice = _service.GetRequiredService<BService>();//获取Bservice
                List<int> id = await _Bservice.GetListIds();//调用Bservice中的方法

                return id;
            }
            catch (Exception e)
            {
                throw new UserFriendlyException(e.Message);
            }
        }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
官网资源 ============================================================ Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ============================================================ ================================= Apache Tomcat 7.0 Patch Proposals ================================= RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT: [ start all new proposals below, under PATCHES PROPOSED. ] PATCHES PROPOSED TO BACKPORT: [ New proposals should be added at the end of the list ] * https://bz.apache.org/bugzilla/show_bug.cgi?id=54330 Refactor Member interface to reduce dependency on concrete implementation. Based on a patch by Greg Turnquist. I have added this to the status file because it changes an interface. I don't believe there is any harm in this - the interface isn't really usable prior to this patch - but I'd prefer this change to be RTC. http://svn.apache.org/viewvc?rev=1430602&view=rev +1: markt, fhanik -1: * Back-port r1437083 from trunk. http://svn.apache.org/viewvc?view=revision&revision=1437083 Adds SSLContext.clearOptions method to allow clearing of SSL_OP_* options in OpenSSL. This will require tcnative 1.1.25 or errors may be thrown when a
第1个上传组件commons-fileupload =============commons-fileupload ================ common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载。该组件简单易用,可实现一次上传一个或多个文件,并可限制文件大小。 -下载后解压zip包,将commons-fileupload-1.1.1.jar,和commons-io-1.2.jar(这里我们用的是更新的版本,但是用法是一样的)复制到tomcat的webapps\你的webapp\WEB-INF\lib\下,如果目录不存在请自建目录。 新建一个servlet: FileUpload.java用于文件上传: package com.drp.util.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.*; import java.util.*; import java.util.regex.*; import java.io.*; import org.apache.commons.fileupload.servlet.*; import org.apache.commons.fileupload.disk.DiskFileItemFactory; public class FileUpload extends HttpServlet { private String uploadPath = ""; // 用于存放上传文件的目录 private File tempPath = new File("D:\\Tomcat 5.5\\webapps\\drp1.2\\tempimages\\"); // 用于存放临时文件的目录 public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html; charset=GB18030"); PrintWriter out = res.getWriter(); System.out.println(req.getContentLength()); System.out.println(req.getContentType()); DiskFileItemFactory factory = new DiskFileItemFactory(); // maximum size that will be stored in memory //允许设置内存中存储数据的门限,单位:字节 factory.setSizeThreshold(4096); // the location for saving data that is larger than getSizeThreshold() //如果文件大小大于SizeThreshold,则保存到临时目录 factory.setRepository(new File("D:\\Tomcat 5.5\\webapps\\drp1.2\\tempimages")); ServletFileUpload upload = new ServletFileUpload(factory); // maximum size before a FileUploadException will be thrown //最大上传文件,单位:字节 upload.setSizeMax(1000000); try { List fileItems = upload.parseRequest(req); // assume we know there are two files. The first file is a small //
官网资源 ================================================================================ Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================================================ ================================= Apache Tomcat 7.0 Patch Proposals ================================= RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT: [ start all new proposals below, under PATCHES PROPOSED. ] PATCHES PROPOSED TO BACKPORT: [ New proposals should be added at the end of the list ] * https://bz.apache.org/bugzilla/show_bug.cgi?id=54330 Refactor Member interface to reduce dependency on concrete implementation. Based on a patch by Greg Turnquist. I have added this to the status file because it changes an interface. I don't believe there is any harm in this - the interface isn't really usable prior to this patch - but I'd prefer this change to be RTC. http://svn.apache.org/viewvc?rev=1430602&view=rev +1: markt, fhanik -1: * Back-port r1437083 from trunk. http://svn.apache.org/viewvc?view=revision&revision=1437083 Adds SSLContext.clearOptions method to allow clearing of SSL_OP_* options in OpenSSL. This will require tcnative 1.1.25 or errors may be thrown when attempting to call this method.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香煎三文鱼

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值