Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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#_Structuremap - Fatal编程技术网

C# 从注册的泛型接口获取派生类型

C# 从注册的泛型接口获取派生类型,c#,structuremap,C#,Structuremap,我有一个主机应用程序,它提供了一个可以由插件实现的插件接口。当初始化插件时,主机应用程序将传入Structuremap注册表,以便插件可以注册内容 public interface IAppPlugin { void Initialize(IRegistry configure); } public class CatPlugin : IAppPlugin { public void Initialize(IRegistry configure) { c

我有一个主机应用程序,它提供了一个可以由插件实现的插件接口。当初始化插件时,主机应用程序将传入Structuremap注册表,以便插件可以注册内容

public interface IAppPlugin
{
    void Initialize(IRegistry configure);
}

public class CatPlugin : IAppPlugin
{
    public void Initialize(IRegistry configure)
    {
        configure.For<IFilter<IPet>>()
            .Add<CatFilter<IPet>>();
    }
}
公共接口IAppPlugin
{
无效初始化(IRegistry配置);
}
公共类CatPlugin:IAppPlugin
{
公共无效初始化(IRegistry配置)
{
configure.For()
.Add();
}
}
在我的主机应用程序中,我实现了IPetFeralCat,我想从structuremap获取任何过滤器

ObjectFactory.TryGetInstance<IFilter<FeralCat>>
ObjectFactory.TryGetInstance
我希望这会返回我的插件注册的CatFilter过滤器,但它没有(这很有意义,我还没有注册匹配的类型)

我的插件不了解FeralCat,我如何配置structuremap以返回CatFilter

您应该看看,它在您的情况下可能有用

但对于您的特定代码:

var container = new Container();

container.Configure(
    x =>
    {                    
        x.For(typeof(IPet)).Use(typeof(FeralCat));
        x.For(typeof(IFilter<>)).Use(typeof(CatFilter<>));
    });

var instances = container.GetAllInstances<IFilter<FeralCat>>();
var container=newcontainer();
容器。配置(
x=>
{                    
x、 用于(IPet);使用(FeralCat);
x、 用于(类型化(IFilter))。使用(类型化(CatFilter));
});
var instances=container.GetAllInstances();

将为您提供一个
CatFilter

的实例,感谢您的回复,但我已经尝试过了,structuremap会抛出一个“已添加具有相同密钥的项”错误,因为CatFilter的参数是通用的(尽管受约束),而不是接口。。。公共类CatFilter:IFilter,其中TModel:IPetI实际上已经在测试中尝试了这一点,定义CatFilter与您所做的完全相同。它起作用了。您的代码中肯定有更多的东西给您带来了异常。