2010-05-14 72 views
1

我需要在抽象类中做一些不同的事情来获得依赖注入与Ninject一起工作吗?Ninject:抽象类

我有下面的代码基本控制器:

public abstract class BaseController : Controller 
{ 
    public IAccountRepository AccountRepository 
    { 
     get; 
     set; 
    } 
} 

我的模块如下所示:

public class WebDependencyModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<IAccountRepository>().To<AccountRepository>(); 
    } 
} 

这是我Global.asax

protected override void OnApplicationStarted() 
{ 
    Kernel.Load(new WebDependencyModule()); 
} 

protected override IKernel CreateKernel() 
{ 
    return new StandardKernel(); 
} 

它的工作原理时,我用[Inject]装饰IAccountRepository财产属性。

+1

编辑答案有点 - 希望整体事情现在已经很清楚 - 如果这没有意义,请随时留言。顺带一提,请务必下载Ninject源代码 - 这是这个星球上唯一能找到关于Ninject的最佳解决方案。测试是一组相当不错的答案。 – 2010-05-15 01:12:14

+0

啊,这是一个好主意。一定要检查源代码。谢谢! – Pickels 2010-05-15 06:09:42

回答

2

不知道你在做什么。

它看起来像你想做物业注入。如果是这样,你必须坚持这个属性。

Ninject不会随机在属性中粘贴东西。

即使可以,你也不想从试图理解什么取决于什么(我已经完全摆脱了PI)的角度来看待它。

如果你想做构造函数注入,具体的控制器将需要问一个并将其传递给'BaseController'。

Ninject将步行到Object并注入属性属性,但不以任何特殊方式处理abstract类。

无论是或我失去了一些东西。

+0

这对我来说很有意义,因为你不喜欢属性注入,你有一些示例代码?在我看来,你会在某处传递IKernal,这部分我不完全理解,你能解释一下吗? – Haroon 2011-05-04 14:30:06

+0

@Haroon:想不出任何好的例子。你有没有看过[ninject wiki](https://github.com/ninject/ninject/wiki/Table-of-Contents)?我只是说你在任何地方都使用构造函数注入。缺少属性注入作为基类获取注入内容的快捷方式只能通过以下方式来解决:a)丢弃到服务位置(错误)b)使派生构造函数代表您请求它。任何基类要求内核的地方都不比服务地点更好 - 至少Propety Injection会给你一个间接的级别。 – 2011-05-04 15:40:58

+0

多数民众赞成在我的想法,我不喜欢这个事实,我必须通过在内核/容器,并得到ctor解决依赖。传递太多的信息给我喜欢的那个班。属性注入的唯一问题是你正在与Ninject绑定...我看到一个例子,我可以使用typeof 那样,我没有引用ninject,只有我的属性...无论如何,这一切对我来说似乎都非常黑客特别是因为我使用的是国际奥委会容器... – Haroon 2011-05-04 15:48:56