C# 如何使Unity在创建对象实例之后但在将其注入任何位置之前调用方法

C# 如何使Unity在创建对象实例之后但在将其注入任何位置之前调用方法,c#,dependency-injection,unity-container,C#,Dependency Injection,Unity Container,我使用Unity进行依赖注入。我想实现这样的目标: public interface MyInterface { void MyMethod(); } myContainer.RegisterType<MyInterface, MyConcreteType>(new InjectionFactory(c => { var result = c.Resolve<MyConcreteType>(); result.MyMethod(); ret

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

public interface MyInterface { void MyMethod(); }
myContainer.RegisterType<MyInterface, MyConcreteType>(new InjectionFactory(c =>
{
    var result = c.Resolve<MyConcreteType>();
    result.MyMethod();
    return result;
}));
构建Unity容器时:

myContainer.RegisterType<MyInterface, MyConcreteType>();

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

可能吗?有更好/更优雅的方式吗?

可能是这样的:

public interface MyInterface { void MyMethod(); }
myContainer.RegisterType<MyInterface, MyConcreteType>(new InjectionFactory(c =>
{
    var result = c.Resolve<MyConcreteType>();
    result.MyMethod();
    return result;
}));
myContainer.RegisterType(新注射工厂(c=>
{
var result=c.Resolve();
result.MyMethod();
返回结果;
}));

可能是这样的:

public interface MyInterface { void MyMethod(); }
myContainer.RegisterType<MyInterface, MyConcreteType>(new InjectionFactory(c =>
{
    var result = c.Resolve<MyConcreteType>();
    result.MyMethod();
    return result;
}));
myContainer.RegisterType(新注射工厂(c=>
{
var result=c.Resolve();
result.MyMethod();
返回结果;
}));

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

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>();
    }
}
类工厂
{
IUnityContainer\U容器;
公共工厂(IUnityContainer集装箱)
{
_容器=容器;
}
public void Register(),其中TType:MyInterface
{
myContainer.RegisterType(新注射工厂(c=>
{
var result=c.Resolve();
result.MyMethod();
返回结果;
}));
}
公共MyInterface Get()
{
_container.Resolve();
}
}

公共测试类
{
工厂(u工厂),;
公共测试类(工厂)
{
_工厂=工厂;
_factory.Register();
}
公共void TestMethod()
{
var服务=_factory.Get();
}
}

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

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

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>();
    }
}
类工厂
{
IUnityContainer\U容器;
公共工厂(IUnityContainer集装箱)
{
_容器=容器;
}
public void Register(),其中TType:MyInterface
{
myContainer.RegisterType(新注射工厂(c=>
{
var result=c.Resolve();
result.MyMethod();
返回结果;
}));
}
公共MyInterface Get()
{
_container.Resolve();
}
}

公共测试类
{
工厂(u工厂),;
公共测试类(工厂)
{
_工厂=工厂;
_factory.Register();
}
公共void TestMethod()
{
var服务=_factory.Get();
}
}

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

该方法来自同一个类吗?然后从类构造函数调用它。问题是,可以有多个类实现MyInterface,将来可能会添加一些。它们可以通过它们的具体类型来解析,而不必通过MyInterface来解析。这个方法来自同一个类吗?然后从类构造函数调用它。问题是,可以有多个类实现MyInterface,将来可能会添加一些。它们可以通过它们的具体类型来解决,而不必通过MyInterface来解决。这可能会起作用,但只适用于一种具体类型。我希望为实现MyInterface的任何类型的所有实例调用该方法,即使有人添加了实现该接口的新类。这可能会起作用,但只适用于一个具体类型。我希望为实现MyInterface的任何类型的所有实例调用该方法,即使有人添加了实现该接口的新类。这正是我需要的,谢谢!至于方法,它必须按照MyInterface声明的方式实现。如果程序员将实现方法留空,这是他们的简明决定(在某些情况下可能是正确的)。这正是我所需要的,谢谢!至于方法,它必须按照MyInterface声明的方式实现。如果程序员将实现方法留空,这是他们简洁的决定(在某些情况下可能是正确的)。