Dependency injection System.NotSupportedException:父级没有默认构造函数。必须显式定义默认构造函数

Dependency 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 2.0.2
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();不工作,并给我这个错误-家长没有一个默认的构造函数。你以前见过这个吗?为什么会发生这种情况?解决办法是什么?