Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制反转容器的控制反转?_C#_Asp.net_Ioc Container_Ninject - Fatal编程技术网

C# 控制反转容器的控制反转?

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容器,它将在未来加速该领域的任何更改 我想知道还有其他人做过同样的事情吗 我对它所取得的成绩很满意,但理想情况下我会更新它。在我的控件中,我

我最近不得不更新一个相对较大的控件库,它使用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用户控件令人恼火的事情之一。对不起,我没有任何有用的答案。