您的反转控制容器的控制反转?

时间:2009-04-01 01:15:47

标签: c# asp.net ioc-container ninject

我最近不得不更新一个使用Ninject 1.0到Ninject 2.0的相对较大的控件库来帮助解决我在1.0中遇到的一些问题。更新进展顺利,我认为Ninject 2.0更快。

但是为了在将来尝试避免这个问题,我已经创建了自己的注入字段和属性的接口(它实际上将调用我希望在当前Web应用程序中使用的IOC容器上的方法)。所以现在我的控制库独立于任何特定的IOC容器,这将加速未来该区域的任何变化。

我想知道还有其他人做过同样的事吗?

我对它取得的成就感到满意,但理想情况下我想更新它。在我的控件中,我创建这些注入的字段通常是受保护的,并将它们设置在该控件的构造函数中。

IBlogService _blogService = null;
IEmailService _emailService = null;

public Templates_BlogTemplate()
{
    Inject(ref _blogService);
    Inject(ref _emailService);
}

我遇到的问题是我必须在所有对象上使用“ref”来实际设置属性,我不能直接在属性上使用它。

我更愿意沿着这些方向做点什么,但我认为不可能。

IBlogService _blogService = null;
IEmailService _emailService = null;

public Templates_BlogTemplate()
{
    Inject(_blogService, _emailService);
}

有没有人有任何关于如何更新代码或使其以更干净的方式工作的想法?我也想避免使用属性,因此它迫使开发人员决定在控件内的某个点注入变量。

欢迎所有的想法和感受。

由于

2 个答案:

答案 0 :(得分:1)

支持属性注入,并将依赖项注入“this”。

在我的例子中,我有一个调用StructureMap.BuildUp(this)的基类,用户控件将具有以下属性:

public IBlogService _blogService{get;set;}
public IEmailService _emailService{get;set;}

我所拥有的结构图特有的唯一一行是在基类中。如果ninject允许你这样做,那么你可以调用你的代码将控制实例交给它,并让它根据它的配置注入属性。

答案 1 :(得分:1)

您可能需要按IServiceLocator

所述查看Glenn Block

这是一个共享接口,可用于利用IoC而不会对容器产生严重依赖。

相关问题