.net 当属性的类型和实例是第三方包的一部分时,如何对插件的属性使用依赖项注入?

.net 当属性的类型和实例是第三方包的一部分时,如何对插件的属性使用依赖项注入?,.net,dependency-injection,moryx,.net,Dependency Injection,Moryx,我刚开始为我的moryx项目写一些测试。因此,我必须稍微放松一些依赖关系。因此,我尝试将我的插件的依赖项注入到“第三方”实现中。(它不是真正的第三方,但它在另一个项目中,我通过nuget将它添加到我的项目中。)因此接口及其实现是第三方库的一部分 有没有办法注册接口并将其实现设置为Moryx.Runtime.Container,以便注入接口?还是我必须写一个包装 这就是我尝试的:(它不起作用:)) [ServerModule(ModuleName)] 公共类ModuleController:Ser

我刚开始为我的moryx项目写一些测试。因此,我必须稍微放松一些依赖关系。因此,我尝试将我的插件的依赖项注入到“第三方”实现中。(它不是真正的第三方,但它在另一个项目中,我通过nuget将它添加到我的项目中。)因此接口及其实现是第三方库的一部分

有没有办法注册接口并将其实现设置为Moryx.Runtime.Container,以便注入接口?还是我必须写一个包装

这就是我尝试的:(它不起作用:))

[ServerModule(ModuleName)]
公共类ModuleController:ServerModuleBase
{
//...
受保护的重写void OnInitialize()
{
Container.Register();
var thirdPartyImplementation=新的thirdPartyImplementation();
Container.SetInstance(第三方实现);
}
//...
}
[插件(LifeCycle.Singleton,typeof(IMyPlugin),Name=nameof(MyPlugin))]
内部类MyPlugin:IMyPlugin
{
公共i第三方接口第三方实现{get;set;}
}

顺便说一句:DI可以工作,如果将
MyPlugin
中的属性类型更改为
thirdpartyiimplementation
,但我需要用于测试的接口…

是的,您可以。首先,让我解释一下误会或出了什么问题

当您使用
Container.Register()时在没有实现的情况下,我们的容器尝试注册工厂。当使用
SetInstance
而不提供类型参数时,将从参数推断泛型,从而在类下注册

您可以注册类型和接口,让castle使用创建实例,也可以使用

[ServerModule(ModuleName)]
public class ModuleController : ServerModuleBase<ModuleConfig>
{
    //...
     protected override void OnInitialize()
     {
         Container.Register<IThirdPartyInterface>();
         var thirdPartyImplementation = new ThirdPartyImplementation();
         Container.SetInstance(thirdPartyImplementation);
     }
    //...
}

[Plugin(LifeCycle.Singleton, typeof(IMyPlugin), Name = nameof(MyPlugin))]
internal class MyPlugin: IMyPlugin
{
    public IThirdPartyInterface ThirdPartyImplementation {get;set;}
}