繁体   English   中英

Unity - 通过调用类的方法将对象注入到构造函数中

[英]Unity - Inject an object to Constructor by calling a Method of a Class

我有以下界面及其实现

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时,我都想向DummyProxy注入'session id'。 但是这个'session 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这样的抽象)并让它调用DummySession.GetSessionID()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM