究竟是自动注入func <t>的步骤是什么? -- c# 领域 和 c#-4.0 领域 和 .net-4.0 领域 和 ninject 领域 和 ninject-extensions 领域 相关 的问题

What exactly are the steps to auto inject Func<T>?


1
vote

问题

中文

我正在尝试设置一个服务类,在那里我想在其构造函数中注入一个简单的 Func<OtherService> 工厂方法。 type OtherService 是一个类,应该是自我限制的(确实在没有工厂注射的时)。

我安装了最新的ninject核心,indject.extensions.factory nuget包。当我尝试从ninject检索实例时,我会得到关于无法激活intptr的激活异常。

我做错了什么?如果我理解出厂扩展的文档,这种类型的Func绑定应该是自动的,没有任何配置。是否需要在任何地方注册工厂扩展,或为 OtherService 创建一个显式绑定?任何提示都会受到赞赏。

编辑:

我有ninject和ninject.extensions.factory安装在一个小单独的项目中,我在ninject上执行一些自定义。这些是以下内容:

  Kernel.Components.Add<IInjectionHeuristic, CustomInjectionHeuristic>(); Kernel.Components.Add<IActivationStrategy, TransientDisposableActivationStrategy>();   

在其中两个自定义处理程序用于让我使用我的自定义[service]属性来指示属性注入,以及处理使用我自己的Idisposablex界面(具有配置通知)的组件的组件,用于ninject缓存精细调谐。

  public class CustomInjectionHeuristic : NinjectComponent, IInjectionHeuristic, INinjectComponent, IDisposable {     public bool ShouldInject(MemberInfo member)     {         return member.IsDefined(typeof(ServiceAttribute), true);     } }  public class TransientDisposableActivationStrategy : ActivationStrategy {     public override void Activate(IContext context, InstanceReference reference)     {         var scope = context.GetScope();         // care about only transient scoped objects         if (scope != null) return;         if (reference.Instance is Component)             reference.Instance.As<Component>().Disposed +=                 (sender, args) => context.Kernel.Components.Get<ICache>().Clear(sender);         if (reference.Instance is IDisposableEx)             reference.Instance.As<IDisposableEx>().Disposed +=                 (sender, args) => context.Kernel.Components.Get<ICache>().Clear(sender);     } }   

,我也使用ninject.extensions.namedscope扩展名为incallscope()绑定。

这些自定义项都可能对工厂的适当工作产生影响?

Edit2:

我想我得到了它。问题似乎是我必须在启动项目中引用工厂扩展,我定义绑定,而不是在我拥有我的基本ninject设置的类库中。因此,关键是我必须在我定义绑定中引用该项目中的任何绑定相关的扩展名。无论如何,听起来逻辑...

英文原文

I'm trying to set up a service class where I would like to inject a simple Func<OtherService> factory method in its constructor. Type OtherService is a class, which should be self-bound (and is indeed when I inject it without factory).

I've installed the latest Ninject core, and Ninject.Extensions.Factory NuGet packages. When I try to retrieve an instance from Ninject, I get an activation exception about not being able to activate IntPtr.

What am I doing wrong? If I understand correctly the documentation of the Factory extension, this type of Func binding should be automatic, without any configuration. Do I need to register the Factory extension anywhere, or create an explicit binding for OtherService? Any tips would be appreciated.

EDIT:

I have Ninject and Ninject.Extensions.Factory installed in a small separate project, where I do some customizations on Ninject. These are the following:

Kernel.Components.Add<IInjectionHeuristic, CustomInjectionHeuristic>(); Kernel.Components.Add<IActivationStrategy, TransientDisposableActivationStrategy>(); 

where the two custom handlers are for letting me use my custom [Service] attribute for indicating property injection, and for handling disposing of components which use my own IDisposableEx interface (with Disposed notification) for Ninject cache fine tuning.

public class CustomInjectionHeuristic : NinjectComponent, IInjectionHeuristic, INinjectComponent, IDisposable {     public bool ShouldInject(MemberInfo member)     {         return member.IsDefined(typeof(ServiceAttribute), true);     } }  public class TransientDisposableActivationStrategy : ActivationStrategy {     public override void Activate(IContext context, InstanceReference reference)     {         var scope = context.GetScope();         // care about only transient scoped objects         if (scope != null) return;         if (reference.Instance is Component)             reference.Instance.As<Component>().Disposed +=                 (sender, args) => context.Kernel.Components.Get<ICache>().Clear(sender);         if (reference.Instance is IDisposableEx)             reference.Instance.As<IDisposableEx>().Disposed +=                 (sender, args) => context.Kernel.Components.Get<ICache>().Clear(sender);     } } 

And I also use the Ninject.Extensions.NamedScope extension for InCallScope() bindings.

Any of these customizations could have effect on proper work of the factory?

EDIT2:

I think I got it. The problem seems to be that I have to reference the Factory extension in my startup project, where I define bindings, and not in the class library where I have my basic Ninject setup. So the key is that I have to reference any binding-related extension in that project where I define the bindings. Anyway, sounds logical...

              
   
   

回答列表

0
 
vote
vote
最佳答案
 

问题似乎是我必须在我的启动项目中引用工厂扩展,我定义绑定,而不是在我拥有我的基本NINJECT设置的类库中。因此,关键是我必须在我定义绑定中引用该项目中的任何绑定相关的扩展名。无论如何,听起来逻辑...

 

The problem seems to be that I have to reference the Factory extension in my startup project, where I define bindings, and not in the class library where I have my basic Ninject setup. So the key is that I have to reference any binding-related extension in that project where I define the bindings. Anyway, sounds logical...

 
 

相关问题

0  使用dotnet核心查找linux文件类型  ( Find linux file types with dotnet core ) 
我正在尝试使用C#Dotnet Core 2.0计算Linux系统中给定文件的哈希。 ,当我获得文件(我知道它不是一个真实文件),从其他类型如下: 字符设备文件|块设备|本地插座|命名为管道。 我无法计算那些文件的哈希值,这是它只有意义的原因,这些不是真正的文件。 所以,我的问题是如何发现给定的路径它不是常规文件...

3  GZIP压缩Java / C#压缩问题的差异  ( Gzip compression java c difference in compression issue ) 
我在从Android应用程序到ASP.NET C#服务器的3G数据通信中提高了速度的速度增加了我的项目。 我研究/写入/测试的方法。但是,压缩后添加了白色空间。他们也不同。这真的很困惑我。 与Java / ASP.NET C#中的GZIP类的不同实现有关吗?是我应该关注的东西,还是我只是继续使用.trim()和.tr...

3  使用过滤器将一个集合绑定到多个选项卡  ( Binding one collection to multiple tabs with filters ) 
在我的小型WPF项目中,我有一个 TabControl ,具有三个选项卡。在每个选项卡上是 ListBox 。这个项目跟踪我们需要购买的杂货。 (不,这不是家庭作业,这是我的妻子。)所以我有一个 998887662 s的列表,每个 Name 和 Needed 属性: true 当我们需要该项目时, false 我们...

2  模型不会围绕正确的轴旋转  ( Model doesnt rotate around the correct axis ) 
我有这个代码片段,将模型旋转到右侧。 Point3D centre = GetCenter(model); Vector3D axis = new Vector3D(0, 1, 0); Matrix3D transformationMatrix = model.C...

0  误差  ( Error with position ) 
我收到错误: 错误:赋值的左侧必须是变量,属性或索引器 问题是什么? ...

1  TabControls中的传输数据  ( Transport data within tabcontrols ) 
我有一个 TabControl ,两个页面, tabPage1 和 tabPage2 。两个页面都有DB连接和操作。 问题: tabPage1 显示 DataGridView上的用户的记录面板(工作)。我希望能够点击 DataGridView 中的记录,并将程序显示记录的详细信息 tabPage2's ...

1  锁(objlocker)是否使该对象线程安全应用程序宽?并且静态成员自动安全安全吗?  ( Does the lockobjlocker make that object thread safe app wide and are static m ) 
当您锁定对象时,该对象锁定在整个应用程序中? 例如,本片中的C#3.0中的NutShell第19.6.1节"线程安全和.NET框架类型" : #FFFFFF5 第一个锁定: #FFFFFF6 防止另一个线程访问: #FFFFFF7 或两者都可以同时执行? ,CLR自动使静态方法安全安全吗?或者...

55  tpl dataflow,post()和sendasync()之间的功能差异是什么?  ( Tpl dataflow whats the functional difference between post and sendasync ) 
我对通过post()或sendasync()发送物品之间的区别。我的理解是,在所有情况下,一旦项目到达数据块的输入缓冲区,控制将返回到调用上下文,正确?那为什么我曾经需要SendAsync?如果我的假设不正确然后我想知道,相反,如果使用数据块的整个想法是建立并发和异步环境,为什么有人会使用Post()。 我理解当然...

2  格式化HTML通过C#[复制]  ( Format html through c sharp ) 
这个问题已经在这里有答案: 在c#中,什么是最好的方法将字符串格式化为XML? (10个答案) ...

1  C#WinForms:激活线程的计时器  ( C sharp winforms activating a timer from a thread ) 
public void timer_thing() { Thread timer = new Thread(new ThreadStart(() => { Thread.Sleep(500); if (is_mouse_down) ...

-1  RASA在短语中拍摄一些关键字并返回自定义线[关闭]  ( Rasa to take some keywords in the phrase and return a custom line ) 
关闭。这个问题是基于意见的。它目前不接受答案。 想要改进这个问题?更新问题,因此它可以通过编辑此帖来回答事实和引用。 关闭去年。 ...

0  我正在更新我的尼古特包,他们没有更新并保持错误  ( I am updating my nuget packages and they are not updating and keep giving error ) 
当我更新我的nuget包时,我收到错误。帮助我这个错误。 错误 system.nullreferenceException:对象引用未设置为一个实例 对象。 在nuget.packagemanagement.ui.uiacreengine。&lt; b__9_0(包裹型包) 在system.linq.enumab...

0  铸造数组上的运行时错误到String枚举器[复制]  ( Runtime error on casting array to string enumerator ) 
这个问题已经在这里有答案: 从阵列中获取通用枚举器 (7个答案) 关闭 7...

0  数据绑定到listview  ( Databinding to listview ) 
我有一个类 public class Foo { public List<string> list1 { get; set;} public List<string> list2 { get; set; } public string url; ...

0  C#MySQL Connect:在字典中不存在给定的键  ( C sharp mysql connect the given key was not present in the dictionary ) 
我的新C#项目有一个问题。有以下例外: C:MinGWlib3 。我有一个数据库和一个空的数据表。 我写了以下代码: C:MinGWlib4 在哪里错误?为什么不起作用? ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.