Autofac通用委托工厂

问题描述 投票:0回答:1

我想为所有类型或类注册一个通用的委托工厂:有什么办法吗?这里有一个解决方案,一次只注册一个typeclass......不是很好,还有其他方法吗?

    public class Foo<T>

    {

        public string Name { get; set; }

        public T Value;

    }

    public class FooBuilder<T>

    {

        public Foo<T> Build(string name)

        {

            return new Foo<T> { Name = name };

        }

    }


    public delegate Foo<T> FooFactory<T>(string name);



    public static void TestFoo()

    {

        var builder = new ContainerBuilder();

        builder.RegisterType<FooBuilder<double>>();

        builder.Register<FooFactory<double>>(c =>    c.Resolve<FooBuilder<double>>().Build);

        IContainer container = builder.Build();

        var foo1 = container.Resolve<FooFactory<double>>()("foo1");

    }
c# autofac
1个回答
2
投票

你可以注册 "开放的通用 "作为提供服务。对于你的例子。

var builder = new ContainerBuilder();

// This registers an open generic that can provide all FooBuilder<T>.
builder.RegisterGeneric(typeof(FooBuilder<>));

var container = builder.Build();

// Resolve the builder directly...
var fooBuilder = container.Resolve<FooBuilder<double>>();

// ...or get a factory method if that's what you need
var fooBuilderFactory = container.Resolve<Func<FoodBuilder<double>>>();

© www.soinside.com 2019 - 2024. All rights reserved.