我是依赖注入的新手,但很快成为了拥护者。但是,我似乎找不到任何令人满意的描述如何在运行时处理未从容器注入的对象的内容。我将其称为数据对象。
请考虑以下内容(如果以下内容表明我完全错过了DI的内容,请原谅我): 在过去,我将对象编码如下:-
public class Person
{
public string Name { get; set; }
public string Emailaddress { get; set; }
public void DoSomething(params string[] paremeters)
{
//code to do something with this person using parameters
}
public void DoSomethingElse()
{
//code to do something else with this person
}
}
现在使用DI可以执行以下操作:-
public class Person
{
public string Name { get; set; }
public string Emailaddress { get; set; }
}
public interface IPersonService
{
void DoSomething(Person person,params string[] paremeters);
void DoSomethingElse(Person person);
}
public class PersonService : IPersonService
{
public void DoSomething(Person person,params string[] paremeters)
{
//code to do something with this person using parameters
}
public void DoSomethingElse(Person person)
{
//code to do something else with this person
}
}
并且IPersonService服务将通过构造函数“注入”到需要它的任何进程中。问题在于,必须在PersonService中的每个过程和方法中添加一个Person参数,这感觉是错误的,但是似乎没有其他选择能更好地工作。
例如,我可以使用类似的
Person _person;
void Configure(Person person)
{
_person = person
}
..在我所有需要瞬态数据的服务中,但是您遇到状态问题,所有此类服务都必须是瞬态的。再次对此感到不满意。
在此示例中,人员可能来自数据库,屏幕表格,文件,是从目录或其他位置的列表中选择的。
我知道我可以使用数据存储库(用于访问数据的类和所有CRUD东西)注入我的数据,确实我有这样做的意图,但这仍然无法解决我该如何判断的问题服务,在这种情况下,就是要访问的人,除非我当然向服务中添加了一个过程,该过程包含用于该人身份的参数,然后使用存储库去获取该人...但是这样就可以了例如初始化方法会导致国家出现问题。它还依赖于记住调用服务中的过程来配置数据。
我的问题是,这里的最佳做法是什么?请保持简单。
非常感谢