Ninject:在库中也使用配置

本文关键字:配置 Ninject | 更新日期: 2023-09-27 17:59:48

我从Ninject开始,在MVC 4场景中使用它,并在"NinjectWebCommon"中配置了绑定。一切都很好。

现在我想在一个库中以某种方式从MVC应用程序中获得内核配置。

例如:在我的MVC项目中,我有一个属性为的类"BaseController"

[Inject]
public IKernel Ninject { get; set; }

完美工作,意味着在从BaseController继承的控制器中的每个操作中,属性"Ninject"都是好实例,而不是null!

现在,我的外部库中有一个类"NinjectProxy",它具有完全相同的属性,但每次我创建一个新的"NinjectProxy"实例时,道具"Ninject"都是null!

public class NinjectProxy
{
    [Inject]
    public IKernel Ninject { get; set; }

    public T Resolve<T>()
    {
        return Ninject.Get<T>();
    }
}

我的完整解决方案看起来像:

MVC app
- Reference on Common.dll and Ninject
- Contains ControllerBase
Common.dll
- This project contains the NinjectProxy class and have a reference on Ninject
- Here I want somehow get the kernel config that I configured in the mvc app to resolve dependecies
Implementation.dll
- References on Common.dll and Ninject

lib加载在"NinjectWebCommon"中,带有:

kernel.Load(Assembly.Load("lib"))

如果这很重要。

有人知道我做错了什么吗?

Ninject:在库中也使用配置

您正在使用new手动创建实例。该对象不由ninject处理,永远不会获得依赖项。

在某个地方注入实例,或者使用工厂由ninject创建实例

但鲁本说得很对,你正在遵循一种无论如何都不应该使用的模式。相反,在引导程序中完全配置Ninject。使用与整个项目匹配的约定,或者引用所有必需的程序集并为它们设置绑定。