Autofac使用开放式通用类解析开放式通用接口

时间:2015-07-23 12:58:46

标签: c# generics autofac

所以我有一个界面和类:

  var plot = $.plot("#chart_widget",
                [
                    {
                        data: issued,
                        label: "Issued"
                    },
                    {
                        data: released,
                        label: "Released"
                    },
                ],
                $.extend(true, {}, Plugins.getFlotDefaults(), {
                    series: {
                        lines: {
                            fill: false,
                            lineWidth: 1.5
                        },
                        points: {
                            show: true,
                            radius: 4,
                            lineWidth: 1.1
                        },
                        grow: {active: true, growings: [{stepMode: "maximum"}]}
                    },
                    grid: {
                        hoverable: true,
                        clickable: true
                    },
                    xaxis: {
                        mode: "time",
                        minTickSize: [1, "day"],
                        dayNames: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
                        timeformat: "%a",
                        tickLength: 0
                    },
                    tooltip: true,
                    tooltipOpts: {
                        content: '%s: $%y'
                    }
                })
                );

我会有一些课程要求它:

public interface IMyInterface<T> where T : ISomeEntity {}

public class MyClass<T> : IMyInterface<T>
    where T : ISomeEntity {}

我已经做了各种各样的事情来让它注册开放的通用接口和类而没有运气。

我只想说:

public class SomeClass : ISomeClass
{
    public SomeClass (IMyInterface<AuditEntity> myInterface) {}
}

如果我必须明确地执行以下操作,那将会很烦人。

container.RegisterType(typeof(MyClass<>)).As(typeof(IMyInterface<>));

这不应该是微不足道的吗?

2 个答案:

答案 0 :(得分:7)

您必须使用RegisterGeneric方法,请参阅Registration Concepts - Open Generic Components

这样的事情应该有效:

builder.RegisterGeneric(typeof(MyClass<>)).As(typeof(IMyInterface<>)); 

答案 1 :(得分:2)

是的,对于container.RegisterGeneric:

是微不足道的
<form-progress customcallback="loadcallback"></form-progress>

您似乎也在问题的示例中切换了界面和类。注册应该从想要注册的类型(例如MyClass)开始,然后是要注册的类型(例如IMyInterface)。