que*_*en3 11 c# dependency-injection
这是我想要的DI容器:
public class Class
{
public Class(IDependency dependency, string data) { }
}
var obj = di.Resolve<Class>(() => new Class(null, "test"));
Run Code Online (Sandbox Code Playgroud)
兴趣点:
另一个主要要求是我希望自动拾取我的组件,即我不想注册类 - 我希望IoC能够选择它,因为它知道如何解决IDependency.
此外,Property Injection有时也很有用,但这是可选的.
问题实际上是关于功能的组合 - 拥有所有功能 - 类型安全,参数,自动拾取......很容易检查一个功能,但除非一个人熟悉,否则它们的组合不容易验证特定容器并了解其功能.这样的问题.
Mar*_*ann 29
我认为通过定义可以创建您的类的抽象工厂会更好.
public interface IFactory
{
MyClass Create(string data);
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以像这样创建IFactory的实现:
public class MyFactory : IFactory
{
private IDependency dependency;
public MyFactory(IDependency dependency)
{
if (dependency == null)
{
throw new ArgumentNullException("dependency");
}
this.dependency = dependency;
}
#region IFactory Members
public MyClass Create(string data)
{
return new MyClass(this.dependency, data);
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
在容器中,您将注册MyFactory和IDependency的实现.
您现在可以使用容器来解析Factory,并使用Factory来获取类:
var mc = container.Resolve<IFactory>().Create(data);
Run Code Online (Sandbox Code Playgroud)
这种方法完全是类型安全的,可以很好地将依赖项与运行时应用程序数据分离.