我在Ninject wiki上阅读了一堆问题和所有文档,但我仍然怀疑并向自己提出问题,比如“我做对了吗?正确的方式来使用依赖注入时,只有在运行时才会知道一些参数
- 如果我需要使用控制器来初始化对象,该怎么办? 字段参数只会在运行时间?
A)所以我需要的东西是这样的:
public class MyClass : IMyInterface
{
private string _field;
readonly IRepository _repo;
public MyClass(string field, IRepository repo)
{
_field = field;
_repo = repo;
}
}
但如何正确地绑定呢?或者我应该永远忘记使用构造函数出于任何原因,但构造函数依赖注入?
B)并做到这一点,如:
public class MyClass : IMyInterface
{
private string _field;
readonly IRepository _repo;
public MyClass(IRepository repo)
{
_repo = repo;
}
public void Initialize(string field)
{
_field = field;
}
}
我认为这是不正常随时随地打电话的时候,我需要这个对象初始化函数或我错了?
据,如果你需要一个短暂的对象
相关性与构造器注入注入这个答案Can't combine Factory/DI和Dependency Inject (DI) "friendly" library和Is there a pattern for initializing objects created via a DI container
使用抽象工厂往往是长期的,但有时你需要一个短暂的对象,或基于仅在运行时已知的值构建依赖项。
C)我应该做的,如:
public interface IMyInterface { }
public interface IMyFactory
{
MyClass Create(string field);
}
public class MyFactory : IMyFactory
{
private readonly IRepository _repo;
public MyFactory (IRepository repo)
{
_repo = repo;
}
public MyClass Create(string field)
{
return new MyClass(_repo, field);
}
}
public class MyClass : IMyInterface
{
private string _field;
readonly IRepository _repo;
public MyClass(IRepository repo, string field)
{
_repo = repo;
_field = field;
}
}
如果我需要MyClass的另一个类我要去使用它像
public class OtherClass
{
private IMyInterface _myClass;
public OtherClass(IMyFactory factory)
{
_myClass = factory.Create("Something");
}
}
是不是太笨重?
而我的问题是:我必须使用A,B或C情况?为什么?或者也许别的东西?
请[编辑]并将您的问题分为多个聚焦的问题,因为它目前太宽泛了,它可能会以当前的形式关闭,尽管这是一个好的... – kayess
@kayess完成。我截掉了一半的问题。感谢您的咨询 – PilgrimViis
@PilgrimViis仍然不适合SO,不幸的是,可能是阅读常见问题的想法,也许可以在其他网站上发布这些内容。 – ChrisBint