【问题标题】:How do I inject logging into my EF based partial model class?如何将日志记录注入基于 EF 的部分模型类?
【发布时间】:2012-06-01 21:18:38
【问题描述】:

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

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

最终我想我想将我的模型移动到他们自己的库中,以便它们可以被重用,但现在我很高兴有任何答案(甚至是特定于 asp.net mvc 3 项目的)来让它工作.

【问题讨论】:

    标签: asp.net-mvc ninject


    【解决方案1】:

    看起来 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>();
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-04
        • 2019-11-30
        • 1970-01-01
        • 1970-01-01
        • 2015-02-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多