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