Зарегистрируйте универсальный тип в сборке, которая реализует интерфейс с автозаполнением - PullRequest
1 голос
/ 03 октября 2019

Внутри проекта Providers Я определил этот класс

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

ILoggable - это простой интерфейс без методов для реализации.

Затем у меня есть веб-проект снекоторые контроллеры MVC, которые реализуют интерфейс ILoggable. Например,

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

Наконец, у меня есть проект IoC, на который ссылается веб-проект и который ссылается на проект Providers. Так что внутри IoC я не могу использовать MyController класс.

Мне нужно сделать такую ​​регистрацию:

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

, но, очевидно, я не могу сделать это таким образом ...

Я также пытался с

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

и я искал использовать

builder.RegisterAssemblyTypes(assemblies)

, но безуспешно.

1 Ответ

1 голос
/ 03 октября 2019

Вы регистрируете класс один, а не интерфейс.

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

Я предполагаю, что интерфейс - это то, что вводится в контроллер

public class MyController : Controller, ILoggable {
    public MyController (IMyProvider<MyController> provider) {
        //...
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...