我复制了一个使用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)
{ }
}
答案 0 :(得分:1)
如果依赖项已注册,Unity将自动解析构造函数参数。那么最简单的版本就是
container.RegisterType<IUserRepository, UserEntityRepository>(
new ContainerControlledLifetimeManager() );
但是,您所做的事情稍微复杂一些,因为它可以让您更自由地选择特定的参数值。在Unity中,您可以使用注塑工厂:
container.RegisterType<IUserRepository>(
new InjectionFactory(
c => new UserEntityRepository(
c.Resolve<IDataContextFactory<SampleDataContext>> ),
new ContainerControlledLifetimeManager() );
这几乎就像你的autofac版本。请记住首先注册数据上下文工厂。
答案 1 :(得分:0)
这样做:
container.RegisterType<IUserRepository, UserEntityRepository>();
答案 2 :(得分:0)
这个按预期工作..(基于Wiktor的解决方案)
container.RegisterType<IUserRepository>
(new ContainerControlledLifetimeManager(),
new InjectionFactory(c => new UserEntityRepository
(new DefaultDataContextFactory<SampleDataContext>())));