من مقالات زیادی خوندم در مورد تزریق وابستگی و ioc container ها و هرچیزی که در این زمینه فکر کنید
تمامی مقالات این سایت رو هم مطالعه کردم
اما متاسفانه چیزی خاصی از کد فوق متوجه نشدم
از دوستان تقاضا دارم با توجه به اینکه قطعا سوال خیلی از افراد مثل من هم هست توضیح مبسوطی در مورد کدهای فوق داده شود
public class ProjectObjectFactory
{
#region Fields
private static readonly Lazy<Container> ContainerBuilder =
new Lazy<Container>(DefaultContainer, LazyThreadSafetyMode.ExecutionAndPublication);
#endregion#region Container
public static IContainer Container => ContainerBuilder.Value;#endregion
#region DefaultContainer
private static Container DefaultContainer()
{
var container = new Container(ioc =>
{
ioc.For<Microsoft.AspNet.SignalR.IDependencyResolv er>()
.Singleton()
.Add<StructureMapSignalRDependencyResolver>();ioc.For<IIdentity>()
.Use(
() =>
(HttpContext.Current != null && HttpContext.Current.User != null)
? HttpContext.Current.User.Identity
: null);ioc.For<IUnitOfWork>()
.HybridHttpOrThreadLocalScoped()
.Use<ApplicationDbContext>();ioc.For<HttpContextBase>().Use(() => new HttpContextWrapper(HttpContext.Current));
ioc.For<HttpServerUtilityBase>().Use(() => new HttpServerUtilityWrapper(HttpContext.Current.Serve r));
ioc.For<HttpRequestBase>().Use(ctx => ctx.GetInstance<HttpContextBase>().Request);ioc.For<ISessionProvider>().Use<SessionProvider>() ;
ioc.For<IRemotingFormatter>().Use(a => new BinaryFormatter());
ioc.For<ITempDataProvider>().Use<CookieTempDataPro vider>();ioc.AddRegistry<AspNetIdentityRegistery>();
ioc.AddRegistry<TaskRegistry>();
ioc.AddRegistry<AutoMapperRegistery>();
ioc.AddRegistry<ServiceLayerRegistery>();ioc.Scan(scaer => scaer.WithDefaultConventions());
ioc.Policies.SetAllProperties(y => y.OfType<HttpContextBase>());
});
ConfigureAutoMapper(container);
retu container;
}
#endregion#region ConfigureAutoMapper
private static void ConfigureAutoMapper(IContainer container)
{
var configuration = container.TryGetInstance<IConfiguration>();
if (configuration == null) retu;
//saying AutoMapper how to resolve services
configuration.ConstructServicesUsing(container.Get Instance);
foreach (var profile in container.GetAllInstances<Profile>())
{
configuration.AddProfile(profile);
}
}
#endregion
}
برچسب:
نویسنده: محمد رضا جوادیان