C# 从注册的泛型接口获取派生类型
我有一个主机应用程序,它提供了一个可以由插件实现的插件接口。当初始化插件时,主机应用程序将传入Structuremap注册表,以便插件可以注册内容C# 从注册的泛型接口获取派生类型,c#,structuremap,C#,Structuremap,我有一个主机应用程序,它提供了一个可以由插件实现的插件接口。当初始化插件时,主机应用程序将传入Structuremap注册表,以便插件可以注册内容 public interface IAppPlugin { void Initialize(IRegistry configure); } public class CatPlugin : IAppPlugin { public void Initialize(IRegistry configure) { c
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();
}
}
在我的主机应用程序中,我实现了IPet,FeralCat,我想从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与您所做的完全相同。它起作用了。您的代码中肯定有更多的东西给您带来了异常。