通过调用一个类的方法注入一个对象给构造函数

本文关键字:方法 注入 一个对象 构造函数 一个 调用 | 更新日期: 2023-09-27 18:14:48

我有以下接口和它的实现

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容器中,我想在每次容器试图解析IDummyProxy时注入'会话id'。但是这个"会话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实例。

你可以这样做。这是有可能的。它将只创建一次会话Id(这是我假设你想要做的。)

我个人宁愿给DummyProxy一个依赖于DummySession(或者更好的是,像IDummyProxy这样的抽象),并使它调用dummyssession . getsessionid()。