English 中文(简体)
Ninject: 通过客户会议作为构造理由,并具体说明客户使用属性的预期执行。
原标题:Ninject: Passing client s assembly as constructor argument and specifying desired implementation from the client using attributes

I m New to Ninject and Dependency Injection in general solease neobness here=

我对<代码>IConfig接口进行了多次实施,该接口扫描了大会及其在实施<代码>/IConfigOption<>的类型方面的属性。 每条<代码>IConfig执行从不同来源收回其价值。

这些执行工作使大会从哪里开始把扫描作为构造的理由,而我试图提出一种约束,注入这些价值观。 至今,我想到的是:

Bind<IConfig>().To<Config>().WithConstructorArgument("rootAssembly", target);

我的问题是,我似乎无法找到一种办法,来查阅<条码>target。 将采用<代码>Config类别。 如果没有DI,我将使用<代码>Assembly.GetCallingAssembly(),但在这方面,这将产生大会具有约束力的居住地点,而不是预期的目标。

此外,我还需要一种方式,从收到反对的类别/成员中具体指明预期执行<>,例如,用户类别A要求使用<代码>的用户代码>Config, 用户类别B要求使用Config的用户类别。 Manager . 下面是澄清意图使用的一个实例:

public class Client
{
    [UseApplicationConfig]
    public IHelper WithAppConfig { get; set; }

    [UseRoleEnvironmentConfig]
    public IHelper WithRoleEnvironmentConfig { get; set; }
}

public class Helper : IHelper
{
    public Helper(IConfig config)
    {
    }
}

我感觉到,要么从错误的角度来看待这个问题,要么我错失了显而易见的印象,但我不敢肯定我应当寻求什么。 如何做到这一点?

非常感谢。

EDIT: 添加意图使用的实例,并重新阐释问题的某些部分,以便澄清。

问题回答

如果你想获得有关向物体提出的申请的细节,则使用超载<代码>。 WithConstructor Argument (string, Func<IContext, Object>)。 您可以使用所供应的<代码>IContext查询组名(用浮体来审视,像你的布局一样,其行文可能非常复杂,因此我可以提供具体的代码)。

例如,如何利用:

//get the full name of the requested object
Bind<IFoo>()
    .To<Foo>()
    .WithConstructorArgument("bar",
                             c => c.Request.FullName);

然而,我喜欢你从错误的角度来看待这个问题。 如果我正确理解你的问题,它就象你一样,有一间扫描你集会的班子,然后决定用什么来注射,而不是让Ninject给你。 我假定,这是从你使用DI的 t起的遗留问题吗?

我研究如何使用与<条码>具有约束力的背景法或习惯属性,以注入你希望加入的专用<条码>。 参看

链接网页实际上有类似做法的例子,可以为你工作:

Bind<IWarrior>()
    .To<Samurai>()
    .When(request => request.Target.Type.Namespace.StartsWith("Samurais.Climbing"));

我可能仍然使用<代码>WhenInjectedInto或属性,但如果你在日后重新证明你的名字,你就没有“魔法”。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签