有人可以帮忙吗?
我有一个 wpf 应用程序(应该没关系),在 Onstart 中我有我的 bootstrap 东西..就像这样..
// Create unity container my service and repository
container = new UnityContainer()
.RegisterType<ISecurityRepository, SecurityRepository>()
.RegisterType<ISecurityService, SecurityService>();
基本上 ISecurityService 希望我传入 ISecurityRepository,因此上述失败。
但我有点困惑,我是否必须创建一个新的 IsecurityRespository 然后将其传递进去,这会击败该对象不是吗?
无论如何,我是否说“从容器中将 ISecurityRepository 传递到 SecurityService 中”,但它尚未构建?
有任何想法吗?
您不必先创建实例。一切都正常。这就是 IoC 容器的魔力。
Example:
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>();
}
}
}
这将打印:
SecurityRepository created
SecurityService created
Repository is A SecurityRepository
My class has security: A SecurityService
您有多种选择,例如预先创建实例(如您在后续文章中所示)或延长注入依赖项的生命周期,以便它们不会在每次需要时重新创建。但对于基本情况,这是可行的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)