0

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

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

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

4

2 回答 2

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>();
    }
}
于 2012-06-01T21:32:33.297 回答
0

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

于 2012-06-02T19:31:35.380 回答