gpt4 book ai didi

c# - 带有对象初始化器和 LINQ 的 Ninject

转载 作者:行者123 更新时间:2023-12-02 15:38:49 25 4
gpt4 key购买 nike

我是 Ninject 的新手,所以我正在尝试的可能根本不可能,但我想问一下。以下是我随意写的,所以可能有错别字。假设我有一个界面:

public interface IPerson
{
string FirstName { get; set; }
string LastName { get; set;}

string GetFullName();
}

具体的:

public class Person : IPerson
{
public string FirstName { get; set; }
public string LastName { get; set; }

public string GetFullName()
{
return String.Concat(FirstName, " ", LastName);
}
}

当我从数组或 xml 检索数据时,我习惯做这样的事情:

public IEnumerable<IPerson> GetPeople(string xml)
{
XElement persons = XElement.Parse(xml);

IEnumerable<IPerson> people = (
from person in persons.Descendants("person")
select new Person
{
FirstName = person.Attribute("FName").Value,
LastName = person.Attribute("LName").Value
}).ToList();

return people;
}

我不想以这种方式将具体与界面紧密耦合。我无法找到有关将 Ninject 与 LINQ to Objects 或对象初始值设定项一起使用的任何信息。我可能找错了地方,但我已经找了一天了,但一点运气都没有。

我正在考虑将内核放入单例实例中,看看这是否可行,但我不确定是否可行,而且我听说传递内核是一件坏事。我目前正在尝试在类库中实现这一点。如果这是不可能的,是否有人有任何关于这种情况下最佳实践的示例或建议?预先感谢您的帮助。

编辑:根据一些答案,我觉得我应该澄清一下。是的,上面的例子看起来很短暂,但这只是我试图做的一件作品的一个例子。让我们看一下更大的图景。假设我通过第 3 方 Web 服务收集所有数据,并为其创建一个接口(interface),而不是 XML,该数据可以是 wsdl 中定义的对象,有时也可以是 xml 字符串。 IPerson 可用于 Person 对象和 User 对象。我将在一个单独的类库中执行此操作,因为它需要可移植并且将在其他项目中使用,并将其交给 MVC3 Web 应用程序,并且对象也将在 javascript 中使用。我感谢迄今为止所有的意见。

最佳答案

您的 Person 类是一个短暂的对象,它不适合用于依赖项注入(inject)。除此之外,它不包含任何行为,只是一个 POCO(普通旧 CLR 对象)。因为 POCO 不依赖于任何值得抽象的东西,所以通常没有理由抽象它们。换句话说:用给定的例子。您不需要 IPerson 界面。您可以在整个应用程序中直接使用 Person 类。

不过,GetPeople 方法通常可以是您使用 DI 配置抽象出来的服务的一部分。然而,包含 GetPeople(string xml) 方法的服务接口(interface)可能是一个错误的抽象,因为这意味着您将始终提供 xml 字符串。当您拥有此 XML 字符串时,是否有任何理由以任何其他方式解析该 XML 字符串?如果有一个带有 GetAllPeople() 方法的 IPersonRepository 接口(interface)会更方便。给定的实现可以是使用 XML 数据源(从磁盘、数据库或谁知道什么)获取人员的 XmlPersonRepository

关于c# - 带有对象初始化器和 LINQ 的 Ninject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205256/

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