2

我有一些使用强类型元数据注册类型的代码。它看起来像这样:

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 通过,但ComponentNotRegisteredException在 3.0.2 中抛出了一个。

我错过了什么吗?仍然是Meta<T, TMetadata>要走的路,还是有新的方法可以做到这一点?

4

1 回答 1

2

Autofac 3.0 中有很多重大变化。

因此,基于接口的元数据支持从 Autofac 核心移至 MEF 集成包。

因此,您需要获取Autofac.Mef包并按照文档RegisterMetadataRegistrationSources()中的说明调用构建器上的扩展方法。

var builder = new ContainerBuilder();

builder.RegisterMetadataRegistrationSources()

builder.RegisterType<Foo>()           
       .AsSelf()
       .WithMetadata<IFooMetadata>(m => m.For(x => x.Position, 1));

您可以在本文中阅读有关此重大更改的更多信息:NuGet 上可用的 Autofac 3.0 Beta 包

于 2013-06-06T11:51:31.640 回答