Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Autofac通用代理工厂_C#_Autofac - Fatal编程技术网

C# Autofac通用代理工厂

C# Autofac通用代理工厂,c#,autofac,C#,Autofac,我想为所有类型或类注册一个泛型委托工厂:有办法吗?下面是一个一次注册一个类型/类的解决方案。。。。不是很好还有别的办法吗 public class Foo<T> { public string Name { get; set; } public T Value; } public class FooBuilder<T> { public Foo<T> Buil

我想为所有类型或类注册一个泛型委托工厂:有办法吗?下面是一个一次注册一个类型/类的解决方案。。。。不是很好还有别的办法吗

    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");

    }
公共类Foo
{
公共字符串名称{get;set;}
公共价值观;
}
公共类FooBuilder
{
公共Foo生成(字符串名称)
{
返回新的Foo{Name=Name};
}
}
公共委托Foo FooFactory(字符串名称);
公共静态void TestFoo()
{
var builder=new ContainerBuilder();
RegisterType();
注册(c=>c.Resolve().Build);
IContainer容器=builder.Build();
var foo1=container.Resolve()(“foo1”);
}

您可以将“开放泛型”注册为提供服务。例如:

var builder=newcontainerbuilder();
//这注册了一个可以提供所有FooBuilder的开放泛型。
builder.RegisterGeneric(typeof(foodbuilder));
var container=builder.Build();
//直接解析生成器。。。
var fooBuilder=container.Resolve();
//…如果你需要的话,也可以用工厂方法
var fooBuilderFactory=container.Resolve();

您可以将“开放泛型”注册为提供服务。例如:

var builder=newcontainerbuilder();
//这注册了一个可以提供所有FooBuilder的开放泛型。
builder.RegisterGeneric(typeof(foodbuilder));
var container=builder.Build();
//直接解析生成器。。。
var fooBuilder=container.Resolve();
//…如果你需要的话,也可以用工厂方法
var fooBuilderFactory=container.Resolve();