【问题标题】:Autofac Resolve Open Generic Interface with Open Generic ClassAutofac Resolve Open Generic Interface with Open Generic Class
【发布时间】:2015-07-23 12:58:45
【问题描述】:

所以我有一个接口和类:

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

如果我必须经历并明确地做类似的事情会很烦人:

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

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

【问题讨论】:

    标签: c# generics autofac


    【解决方案1】:

    你必须使用RegisterGeneric方法见Registration Concepts - Open Generic Components

    这样的事情应该可以工作:

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

    【讨论】:

      【解决方案2】:

      是的,使用 container.RegisterGeneric 很简单:

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

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

      【讨论】:

      • 是的,我刚刚注意到,我已经习惯了使用 Unity,Ninject,以至于当涉及到 autofac 时,情况正好相反
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      相关资源
      最近更新 更多