mar*_*ith 6 c# ioc-container unity-container
有人可以帮忙吗?
我有一个wpf应用程序(应该没关系),在Onstart我有我的bootstrap东西..就像这样..
// Create unity container my service and repository
container = new UnityContainer()
.RegisterType<ISecurityRepository, SecurityRepository>()
.RegisterType<ISecurityService, SecurityService>();
Run Code Online (Sandbox Code Playgroud)
基本上ISecurityService希望我传入一个ISecurityRepository,因此上面的失败.
但我有点困惑,我是否必须创建一个新的IsecurityRespository然后传入它,这会失败对象不是吗?
无论如何我说"从容器传入SecurityService ISecurityRepository",但它还没有建成?
有任何想法吗?
您不必先创建实例。一切都正常。这就是 IoC 容器的魔力。
例子:
public interface ISecurityService { }
public interface ISecurityRepository { }
public class SecurityService : ISecurityService
{
public SecurityService(ISecurityRepository repository)
{
Console.WriteLine("SecurityService created");
Console.WriteLine("Repository is " + repository);
}
public override string ToString()
{
return "A SecurityService";
}
}
public class SecurityRepository : ISecurityRepository
{
public SecurityRepository()
{
Console.WriteLine("SecurityRepository created");
}
public override string ToString()
{
return "A SecurityRepository";
}
}
public class MyClassThatNeedsSecurity
{
public MyClassThatNeedsSecurity(ISecurityService security)
{
Console.WriteLine("My class has security: " + security);
}
}
class Program
{
static void Main()
{
using (IUnityContainer container = new UnityContainer())
{
container.RegisterType<ISecurityRepository, SecurityRepository>()
.RegisterType<ISecurityService, SecurityService>();
MyClassThatNeedsSecurity myClass =
container.Resolve<MyClassThatNeedsSecurity>();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将打印:
安全存储库已创建 已创建安全服务 存储库是一个安全存储库 我的班级有安全性:SecurityService
您有多种选择,例如预先创建实例(如您在后续文章中所示)或延长注入依赖项的生命周期,以便它们不会在每次需要时重新创建。但对于基本情况,这会起作用。