Dependency injection System.NotSupportedException:父级没有默认构造函数。必须显式定义默认构造函数
我正在使用Ninject 2.0.2Dependency injection System.NotSupportedException:父级没有默认构造函数。必须显式定义默认构造函数,dependency-injection,ninject,n-tier-architecture,interceptor,Dependency Injection,Ninject,N Tier Architecture,Interceptor,我正在使用Ninject 2.0.2 Ninject.Extensions.Interception 使用DynamicProxy 2 城堡核心 城堡2 注射效果很好。 然后我在控制器和bl层之间插入了wcf。 对于层之间的交互,我使用了 Ninject.Extensions.拦截伊恩·戴维斯。 我使用DynamicProxy 2在的帮助下创建代理 城堡。核心和城堡。动力2。 在类中的my Bl层中,有对实现类型的引用 在DAL层。 当我标记[Inject]的属性时,拦截器正在工作 在BL层中存
Ninject.Extensions.Interception
使用DynamicProxy 2
城堡核心
城堡2 注射效果很好。 然后我在控制器和bl层之间插入了wcf。 对于层之间的交互,我使用了 Ninject.Extensions.拦截伊恩·戴维斯。 我使用DynamicProxy 2在的帮助下创建代理 城堡。核心和城堡。动力2。 在类中的my Bl层中,有对实现类型的引用 在DAL层。 当我标记[Inject]的属性时,拦截器正在工作 在BL层中存在的任何属性上。 这意味着,当我切断BL和DAL之间的连接时,它就会工作 但这没用。 因此,问题是如何保留解决这一问题的选择 虽然我是通过截取法来做的 我找到了唯一一篇关于这个主题的帖子- .) 但它并没有解释如何处理它。 在每一个类中,我都已经创建了一个构造函数,并放置了一个 [Inject]属性位于其上方 注: 如果我从IMyClassDao的属性中移除Inject,我将得到 注射,但没有属性-它保持死亡。 我怎样才能使它复活? 我最近从1.5升级到了Ninject 2.0.2,这与它有关吗 版本问题? 有人有解决办法吗 内核处理:
using Ninject;
using Ninject.Modules;
using System.Configuration;
using System;
using Ninject.Extensions.Interception;
using Ninject.Extensions.Interception.Infrastructure.Language;
using Ninject.Extensions.Interception.Request;
private static IKernel createDefault()
{
IKernel _kernel = new StandardKernel(new
ControllerToBLModule(),new NHibernateModule(), new BlToDalModule());
_kernel.Intercept(doIntercept).With<ControllerToBlInterceptor>();
return _kernel;
}
使用Ninject;
使用Ninject.Modules;
使用系统配置;
使用制度;
使用Ninject.Extensions.Interception;
使用Ninject.Extensions.Interception.Infrastructure.Language;
使用Ninject.Extensions.Interception.Request;
私有静态IKernel createDefault()
{
IKernel\u内核=新的标准内核(新的
ControllerToBLModule()、新的NHibernateModule()、新的BlToDalModule());
_Intercept(doIntercept).With();
返回内核;
}
在控制器到bl中:
public class ControllerToBLModule : NinjectModule
{
public override void Load()
{
Bind<IMyInterfaceBL>().To<MyClassBL>().InRequestScope();
}
}
公共类控制器对象模块:Ninject模块
{
公共覆盖无效负载()
{
Bind().To().InRequestScope();
}
}
在bl至dal中:
public class BlToDalModule : NinjectModule
{
public override void Load()
{
Bind<IMyClassDao>().To<MyClassDaoImpl>().InRequestScope();
}
}
public类BlToDalModule:ninject模块
{
公共覆盖无效负载()
{
Bind().To().InRequestScope();
}
}
我的Bl中的代码是这样的
public class MyClassBL: GlobalBL , IMyInterfaceBL
{
[Inject]
public MyClassBL() : base() { }
[Inject]
public IMyClassDao _daoInstance{get;set;}
public virtual IList<MyObject> GetMyObject()
{
...
}
}
公共类MyClassBL:GlobalBL、IMyInterfaceBL
{
[注入]
public MyClassBL():base(){}
[注入]
公共IMyClassDao_dao实例{get;set;}
公共虚拟IList GetMyObject()
{
...
}
}
在达尔:
public class MyClassDaoImpl : GlobalDAOImpl, IMyClassDao
{
[Inject]
public MyClassDaoImpl() : base() { }
public virtual IList<MyObject> GetMyObjectDao()
{
...
}
}
公共类MyClassDaoImpl:GlobalDAOImpl,IMyClassDao
{
[注入]
公共MyClassDaoImpl():base(){}
公共虚拟IList GetMyObjectDao()
{
...
}
}
我得到的错误:执行
System.NotSupportedException:父级没有默认构造函数。必须明确定义默认构造函数。
在System.Reflection.Emit.TypeBuilder.DefinedDefaultConstructorNolock(MethodAtt属性)中 属性)
在System.Reflection.Emit.TypeBuilder.DefinedDefaultConstructor(MethodAttribute)中 属性)
在System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()中 位于System.Reflection.Emit.TypeBuilder.CreateType()
在Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.CreateType(类型生成器 在e:\horn.horn\ioc\castle.dynamicproxy\Working-2.2\src…中键入)
在使用intercept方法的过程中,有人知道如何通过Ninject保留寻址层的层次结构吗?请您将其弄清楚好吗?然后,希望下一个看它的人可能会读到它并尝试回答它(我回答了很多9个问题,但一天的时间有限)。我几乎解释了所有情况,包括所有组件。关键是_kernel.Intercept(doIntercept).With();不工作,并给我这个错误-家长没有一个默认的构造函数。你以前见过这个吗?为什么会发生这种情况?解决办法是什么?请你把它弄清楚好吗?然后,希望下一个看它的人可能会读到它并尝试回答它(我回答了很多9个问题,但一天的时间有限)。我几乎解释了所有情况,包括所有组件。关键是_kernel.Intercept(doIntercept).With();不工作,并给我这个错误-家长没有一个默认的构造函数。你以前见过这个吗?为什么会发生这种情况?解决办法是什么?