如何将记录注入基于EF的部分模型类?

时间:2012-06-01 21:18:39

标签: asp.net-mvc ninject

我正在使用Ninject 3.x&的Nuget下载NLog 2.x.我已经让ILogger通过我的控制器类上的构造函数注入工作,但我不知道如何使它在我的模型类中工作。我的模型是一个与ADO.NET EntityObject Generator生成的类绑定的部分类。

我尝试使用和不使用[Inject]属性进行Property Injection,但它总是返回null。我不确定我需要做什么,因为控制器构造函数注入都是自动的。

最终我想我想将我的模型移动到他们自己的库中以便可以重复使用,但是现在我对任何答案(甚至特定于asp.net mvc 3项目)都很满意

2 个答案:

答案 0 :(得分:0)

看起来EF并不真正允许IoC用于创建模型,至少在不修改其T4模板的情况下。我可以给出的一个建议是使用ObjectContext的ObjectMaterialized事件,如下所示:

partial void OnContextCreated()
{
    ObjectMaterialized += BAEntities_ObjectMaterialized;
}

public void BAEntities_ObjectMaterialized(object sender, ObjectMaterializedEventArgs e)
{
    if (e.Entity is MyEntityWithLogging)
    {
        //apply initialization logic here
        ((MyEntityWithLogging)e.Entity).Logger = kernel.Get<ILogger>();
    }
}

答案 1 :(得分:0)

实体不应该有任何依赖关系。因此,它们不应由IoC容器创建。重新考虑您的设计,以便业务逻辑不再存在于您的实体中。