我有一些代码可以使用强类型metadata来注册类型。它看起来像这样:
class Foo { }
public interface IFooMetadata
{
int Position { get; }
}
[TestFixture]
public class MyTestFixture
{
[Test]
public void Test()
{
var builder = new ContainerBuilder();
builder.RegisterType<Foo>()
.AsSelf()
.WithMetadata<IFooMetadata>(m => m.For(x => x.Position, 1));
using (var container = builder.Build())
{
var fooWithMeta = container.Resolve<Meta<Foo, IFooMetadata>>();
}
}
}
我刚刚更新了我的代码以使用当前版本的Autofac(3.0.2),似乎无法解析以这种方式注册的任何类型(ComponentNotRegisteredException
)。
我编写了上述测试,并使用了Autofac 2.6.1.841,但在3.0.2中抛出了ComponentNotRegisteredException
。
我错过了什么吗? Meta<T, TMetadata>
还有可行吗,还是有新方法可以做到这一点?
答案 0 :(得分:2)
Autofac 3.0有很多重大变化。
因此,基于接口的元数据支持已从Autofac核心移至MEF集成包。
因此,您需要获取Autofac.Mef包并按照documentation中的说明在构建器上调用RegisterMetadataRegistrationSources()
扩展方法。
var builder = new ContainerBuilder();
builder.RegisterMetadataRegistrationSources()
builder.RegisterType<Foo>()
.AsSelf()
.WithMetadata<IFooMetadata>(m => m.For(x => x.Position, 1));
您可以在本文中了解更多这一重大变化:Autofac 3.0 Beta packages available on NuGet