C#学习教程:Unity Application Block,如何将参数传递给Injection Factory?分享


Unity Application Block,如何将参数传递给Injection Factory?

这就是我现在所拥有的

Container.RegisterType(); Container.RegisterType( new InjectionFactory( (c) => c.Resolve().GetUser("John"))); 

得到它

 Container.Resolve(); 

我想将一个名称作为参数传递给Factory,以便我能够用名称解析用户对象; 像这样的东西:

  Container.Resolve("Jonh"); 

如何更改此案例的类型注册?

虽然大多数DI框架具有执行这些类型注册的高级function,但我个人宁愿更改应用程序的设计来解决此类问题。 这使我的DI配置变得简单,使代码更容易理解。 特别是对于依赖于某些上下文(线程,请求,等等)或具有必须明确管理的生命周期的对象的创建,我喜欢定义工厂。 工厂使这些事情更加明确。

在您的情况下,您想要获取特定用户的个人资料。 这通常是您希望拥有工厂的东西。 这是一个例子:

 // Definition public interface IProfileFactory { IProfile CreateProfileForUser(string username); } // Usage var profile = Container.Resolve() .CreateProfileForUser("John"); // Registration Container.RegisterType(); // Mock implementation public class ProfileFactory : IProfileFactory { public IProfile CreateProfileForUser(string username) { IUser user = Container.Resolve() .GetUser(username); return new UserProfile(user); } } 

我希望这有帮助。

Resolve方法允许传递ResolverOverride的参数。 ResolverOverride的子类型是ParameterOverride,可用于将参数传递给已解析的构造函数。

你可以这样做(参数是Name,传递值是John):

上述就是C#学习教程:Unity Application Block,如何将参数传递给Injection Factory?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

 Container.Resolve(new ParameterOverride("Name", "John")); 

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1269698.html

(0)
上一篇 1天前
下一篇 1天前

精彩推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注