假设我有IRepository接口及其实现SqlRepository,它将LINQ作为参数作为SQL DataContext的参数.假设我有IService接口及其实现服务,它需要三个IRepository,IRepository和IRepository.演示代码如下:
public interface IRepository<T> { } public class SqlRepository<T> : IRepository<T> { public SqlRepository(DataContext dc) { ... } } public interface IService<T> { } public class Service<T,T1,T2,T3> : IService<T> { public Service(IRepository<T1> r1,IRepository<T2>,IRepository<T3>) { ... } }
在创建Service类以使用相同的DataContext注入所有三个存储库时,是否有任何方法?
解决方法
您需要做的就是确保在您的Unity容器中注册Datacontext时,请在config中使用PerResolveLifetimeManager:
<type type="<namespace>.DataContext,<assembly>"> <lifetime type="Microsoft.Practices.Unity.PerResolveLifetimeManager,Microsoft.Practices.Unity" /> </type>
或在代码中:
container.RegisterType<DataContext>(new PerResolveLifetimeManager());
然后,只要容器解析服务,任何依赖于需要DataContext的依赖项都将提供完全相同的依赖项.但是,解决Service的下一个请求将创建一个新的DataContext.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。