Meta <t,tmetadata =“”>在Autofac 3 +中断?</t,>

时间:2013-06-06 11:23:50

标签: autofac

我有一些代码可以使用强类型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>还有可行吗,还是有新方法可以做到这一点?

1 个答案:

答案 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