0

クラスに同じインターフェイス タイプの 2 つのプロパティがあり、それぞれに 2 つの異なる具体的なタイプを注入したい場合、プロパティまたはコンストラクター注入のいずれかを使用して autofac でそれを行うにはどうすればよいですか。

例えば。

class A : IA
{
    public IB PropertyB { get; set; }
    public IB PropertyC { get; set; }

    public A(IB b, IB c)
    {
        PropertyB = b;
        PropertyC = c;
    }

    public void PrintB()
    {
        PropertyB.Print();
    }

    public void PrintC()
    {
        PropertyC.Print();
    }
}

私はこれを試しましたが、もちろん、両方のプロパティに C を挿入するだけです

    var builder = new ContainerBuilder();

    builder.RegisterType<B>().As<IB>();
    builder.RegisterType<C>().As<IB>();
    builder.RegisterType<A>().As<IA>();

    var container = builder.Build();
    var a = container.Resolve<IA>();

または、これは同じ結果になります:

    builder.RegisterType<B>().As<IB>();
    builder.RegisterType<C>().As<IB>();
    builder.RegisterType<A>().As<IA>().PropertiesAutowired();

    var container = builder.Build();
    var a = container.Resolve<IA>();

B が PropertyB に、 C が PropertyC にあることを autofac に伝える方法はありますか?

4

1 に答える 1

2

プロパティ注入を使用すると、次のことができます。

builder.RegisterType<A>()
    .As<IA>()
    .OnActivating(e =>
{
    e.Instance.PropertyB = e.Context.Resolve<BImpl1>();
    e.Instance.PropertyC = e.Context.Resolve<BImpl2>();
});
于 2012-06-27T08:18:11.517 に答える