如何让 Unity 在创建对象实例之后但在将其注入任何地方之前调用方法

How to make Unity call a method after creating an object instance but before it is injected anywhere

我正在使用 Unity 进行依赖注入。我想实现这样的目标:

public interface MyInterface { void MyMethod(); }

构建 Unity 容器时:

myContainer.RegisterType<MyInterface, MyConcreteType>();

myContainer.AddPostConstructor(x => (x as MyInterface)?.MyMethod());

可能吗?有没有better/more优雅的方法?

可能是这样的:

myContainer.RegisterType<MyInterface, MyConcreteType>(new InjectionFactory(c =>
{
    var result = c.Resolve<MyConcreteType>();
    result.MyMethod();
    return result;
}));

另一种方式——通过特殊工厂注册实现并使用它:

class Factory
{
    IUnityContainer _container;

    public Factory(IUnityContainer container)
    {
        _container = container;
    }

    public void Register<TType>() where TType : MyInterface
    {
        myContainer.RegisterType<MyInterface, TType>(new InjectionFactory(c =>
        {
            var result = c.Resolve<TType>();
            result.MyMethod();
            return result;
        }));
    }

    public MyInterface Get()
    {
        _container.Resolve<MyInterface>();
    }
}

...

public TestClass
{
    Factory _factory;
    public TestClass(Factory factory)
    {
        _factory = factory;
        _factory.Register<MyConcreteType>();
    }

    public void TestMethod()
    {
        var service = _factory.Get();
    }
}

因此,所有未来的实现都必须在工厂中注册。但是仍然不能保证方法 MyMethod 将被正确实施或完全实施。