[英]Resolving dependency in Unity
我复制了一个使用AutoFac作为IOC的存储库模式示例,但是在我的项目中我使用了UNITY,有关如何在Unity 3.0中编写此代码的任何想法
AutoFac:
builder.Register<IUserRepository>(x => new UserEntityRepository (x.Resolve<IDataContextFactory<SampleDataContext>>())).SingleInstance();
将向其中注入IOC的类:
public class UserEntityRepository : EntityRepository<User, SampleDataContext>, IUserRepository
{
public UserEntityRepository(IDataContextFactory<SampleDataContext> databaseFactory)
: base(databaseFactory)
{ }
}
如果已注册依赖项,则Unity将自动解析构造函数参数。 那么最简单的版本是
container.RegisterType<IUserRepository, UserEntityRepository>(
new ContainerControlledLifetimeManager() );
但是,您所做的会稍微复杂一些,因为它使您可以更自由地选择特定的参数值。 在Unity中,您可以通过注入工厂来实现:
container.RegisterType<IUserRepository>(
new InjectionFactory(
c => new UserEntityRepository(
c.Resolve<IDataContextFactory<SampleDataContext>> ),
new ContainerControlledLifetimeManager() );
这似乎就像您的autofac版本。 请记住,首先要注册数据上下文工厂。
只是这样做:
container.RegisterType<IUserRepository, UserEntityRepository>();
这一工作符合我的预期..,(基于Wiktor的解决方案)
container.RegisterType<IUserRepository>
(new ContainerControlledLifetimeManager(),
new InjectionFactory(c => new UserEntityRepository
(new DefaultDataContextFactory<SampleDataContext>())));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.