我有以下接口及其实现

public class DummyProxy : IDummyProxy
{
    public string SessionID { get; set; }
    public DummyProxy(string sessionId)
    {
        SessionId = sessionId;
    }
}

public interface IDummyProxy
{
}

然后我有另一个类来获取会话ID
public class DummySession
{
    public string GetSessionId()
    {
        Random random = new Random();
        return random.Next(0, 100).ToString();
    }
}

现在,在我的unity容器中,每当容器试图解析i dummyproxy时,我想将“session id”注入dummyproxy。但此“会话ID”必须从dummysession类生成。
container.RegisterType<IDummyProxy, DummyProxy>(
    new InjectionConstructor(new DummySession().GetSessionId()));

这可能吗?

最佳答案

最好的方法是使用InjectionFactory,即。

container.RegisterType<IDummyProxy, DummyProxy>(new InjectionFactory(c =>
{
    var session = c.Resolve<DummySession>() // Ideally this would be IDummySession
    var sessionId = session.GetSessionId();

    return new DummyProxy(sessionId);
}));

InjectionFactory允许您在创建实例时执行其他代码。
c是用来执行解析的IUnityContainer,我们使用它解析会话,然后获取会话id,从中可以创建DummyProxy实例。

09-28 06:53