我正在使用Ninject 3.x&的Nuget下载NLog 2.x.我已经让ILogger通过我的控制器类上的构造函数注入工作,但我不知道如何使它在我的模型类中工作。我的模型是一个与ADO.NET EntityObject Generator生成的类绑定的部分类。
我尝试使用和不使用[Inject]属性进行Property Injection,但它总是返回null。我不确定我需要做什么,因为控制器构造函数注入都是自动的。
最终我想我想将我的模型移动到他们自己的库中以便可以重复使用,但是现在我对任何答案(甚至特定于asp.net mvc 3项目)都很满意
答案 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容器创建。重新考虑您的设计,以便业务逻辑不再存在于您的实体中。