C# 控制反转容器的控制反转?
我最近不得不更新一个相对较大的控件库,它使用Ninject 1.0到Ninject 2.0来帮助解决我在1.0中遇到的一些问题。更新进展顺利,我认为Ninject 2.0要快得多 然而,为了避免将来出现这个问题,我创建了自己的接口,用于注入字段和属性(基本上调用我希望在当前web应用程序中使用的IOC容器上的方法)。因此,现在我的控制库独立于任何特定的IOC容器,它将在未来加速该领域的任何更改 我想知道还有其他人做过同样的事情吗 我对它所取得的成绩很满意,但理想情况下我会更新它。在我的控件中,我经常创建这些被注入的字段作为受保护的字段,并在该控件的构造函数中设置它们C# 控制反转容器的控制反转?,c#,asp.net,ioc-container,ninject,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);
}
有没有人知道如何整理代码或使其以更干净的方式工作?我还希望避免使用属性,这样它会迫使开发人员决定在控件中的某个点注入变量
一切思想感情都欢迎
感谢支持属性注入,并向“this”注入依赖项 在我的例子中,我有一个调用StructureMap.build(this)的基类,用户控件的属性如下:
public IBlogService _blogService{get;set;}
public IEmailService _emailService{get;set;}
我拥有的structuremap的唯一特定行是基类。如果ninject允许您这样做,那么您可以调用代码将控件实例交给它,并让它根据其配置注入属性。您可能需要查看
这是一个共享接口,可以用来利用IoC,而不需要对容器进行硬依赖。我认为,无法访问用户控件的构造(无法更改构造函数的调用方式)是ASP.NET用户控件令人恼火的事情之一。对不起,我没有任何有用的答案。