gpt4 book ai didi

c# - 控制反转/依赖注入(inject)和转换运算符

转载 作者:太空宇宙 更新时间:2023-11-03 21:41:31 25 4
gpt4 key购买 nike

我有一个由许多 MVC 应用程序使用的 UserModel 类,我正在尝试将其转换为使用 IoC:

public class UserModel
{
public string Login { get; set; }

[DisplayName("Display Name")]
public string DisplayName { get; set; }

public static explicit operator UserModel(string userLogin)
{
IKernel IoC; // Where do I get this from?
var ActiveDirRepo = IoC.Get<IActiveDirectoryRepository>();

var User = ActiveDirRepo.FindById<ActiveDirectoryUser>(userLogin.ToUpper());

return new UserModel()
{
Login = userLogin,
DisplayName = User == null ? userLogin.ToUpper() : User.Name
};
}
}

它有一个从 stringUserModel 的显式转换运算符。以前我只是新建一个ActiveDirectoryRepository并使用它,但我想开始使用 IoC/DI。

我现在遇到的问题是,如何引用我的 IoC 容器 (IKernel)?

我无法从外部将它注入(inject)到 UserModel 中,因为运算符(operator)是创建它的人。

最佳答案

这种转换应该很简单,不需要外部依赖。如果你需要注入(inject)某种依赖,然后忘记转换,没有解决方案。

很简单,将 IKernel 传递给构建方法:

public static UserModel Build(string userLogin, IKernel IoC)
{
var ActiveDirRepo = IoC.Get<IActiveDirectoryRepository>();

var User = ActiveDirRepo.FindById<ActiveDirectoryUser>(userLogin.ToUpper());

return new UserModel()
{
Login = userLogin,
DisplayName = User == null ? userLogin.ToUpper() : User.Name
};
}

然后你可以问问自己,这个方法属于 IKernel 接口(interface)是否有意义:

interface IKernel
{
UserModel Build(string userLogin);
}

关于c# - 控制反转/依赖注入(inject)和转换运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19088877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com