使用Unity调用静态注入方法

Red*_*dog 1 c# dependency-injection unity-container

我们有一个类(实际上很多)有一个静态初始化函数,它需要在依赖注入容器中的对象上执行(使用Unity).

public class MyClass
{
    public static void InitializeMappings(IMapper mapper)
    {
        // Do stuff to mapper
    }
}
Run Code Online (Sandbox Code Playgroud)

我想InitializeMappings在Unity容器实例化新的IMapper实例时调用该函数.

我需要帮助:

  • InitializeMappings从容器中调用该函数
  • 解析mapper函数调用的参数
  • 将调用连接InitializeMappings到IMapper实现的生命周期

我将如何实现/定义这个?

Chr*_*res 5

这是糟糕的设计; 为什么不让mapper实现直接调用其构造函数中的setup函数?

您可以通过扩展或使用注射工厂来获取容器.像这样的东西:

container.RegisterType<IMapper>(
    new WhateverLifetimeYouWant(),
    new InjectionFactory(
        c => {
            var mapper = c.Resolve<IMapper>("RealMapper");
            MyClass.InitializeMappings(mapper);
            return mapper;
        }
)
.RegisterType<IMapper, ActualMapper>("RealMapper");
Run Code Online (Sandbox Code Playgroud)

然后,只要你这样做container.Resolve<IMapper>(),就会运行那么一小块代码.

这仅适用于API,而不是通过配置文件.