在使用autofac实现接口的程序集中注册通用类型

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

我有这种情况...

在项目Providers中,我已经定义了此类

public class MyLogProvider<T> : IMyProvider<T>
    where T : ILoggable 

ILoggable是一个简单的接口,没有实现方法。

然后,我有一个Web项目,其中包含一些实现接口ILoggable的MVC控制器。例如

public class MyController : Controller, ILoggable
{
    ...
} 

最后,我有一个项目IoC,该项目由Web项目引用,并且引用了项目Providers。因此,在IoC内部,我无法使用MyController类。

我需要进行这种注册:

builder.RegisterType<MyLogProvider<MyController>>()
    .As<IMyProvider<MyController>>()
    .InstancePerRequest();

但是很明显,我不能那样做...

我也尝试过

builder.RegisterGeneric(typeof(Log4NetProvider<>)).As(typeof(Log4NetProvider<>));

而且我一直在寻找使用

builder.RegisterAssemblyTypes(assemblies)

但没有成功。...有帮助吗?

谢谢...

c# generics dependency-injection autofac
1个回答
0
投票
您只注册类,而不是接口。

builder.RegisterGeneric(typeof(MyProvider<>)).As(typeof(IMyProvider<>));

我假设接口是注入控制器的东西

public class MyController : Controller, ILoggable { public MyController (IMyProvider<MyController> provider) { //... } }

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