7asemoon
شنبه 05 تیر 1395, 19:19 عصر
من مقالات زیادی خوندم در مورد تزریق وابستگی و ioc container ها و هرچیزی که در این زمینه فکر کنید
تمامی مقالات این سایت (http://dotnettips.info)رو هم مطالعه کردم
اما متاسفانه چیزی خاصی از کد فوق متوجه نشدم
از دوستان تقاضا دارم با توجه به اینکه قطعا سوال خیلی از افراد مثل من هم هست توضیح مبسوطی در مورد کدهای فوق داده شود
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.IDependencyResolver>()
.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<CookieTempDataProvider>();
ioc.AddRegistry<AspNetIdentityRegistery>();
ioc.AddRegistry<TaskRegistry>();
ioc.AddRegistry<AutoMapperRegistery>();
ioc.AddRegistry<ServiceLayerRegistery>();
ioc.Scan(scanner => scanner.WithDefaultConventions());
ioc.Policies.SetAllProperties(y => y.OfType<HttpContextBase>());
});
ConfigureAutoMapper(container);
return container;
}
#endregion
#region ConfigureAutoMapper
private static void ConfigureAutoMapper(IContainer container)
{
var configuration = container.TryGetInstance<IConfiguration>();
if (configuration == null) return;
//saying AutoMapper how to resolve services
configuration.ConstructServicesUsing(container.Get Instance);
foreach (var profile in container.GetAllInstances<Profile>())
{
configuration.AddProfile(profile);
}
}
#endregion
}
تمامی مقالات این سایت (http://dotnettips.info)رو هم مطالعه کردم
اما متاسفانه چیزی خاصی از کد فوق متوجه نشدم
از دوستان تقاضا دارم با توجه به اینکه قطعا سوال خیلی از افراد مثل من هم هست توضیح مبسوطی در مورد کدهای فوق داده شود
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.IDependencyResolver>()
.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<CookieTempDataProvider>();
ioc.AddRegistry<AspNetIdentityRegistery>();
ioc.AddRegistry<TaskRegistry>();
ioc.AddRegistry<AutoMapperRegistery>();
ioc.AddRegistry<ServiceLayerRegistery>();
ioc.Scan(scanner => scanner.WithDefaultConventions());
ioc.Policies.SetAllProperties(y => y.OfType<HttpContextBase>());
});
ConfigureAutoMapper(container);
return container;
}
#endregion
#region ConfigureAutoMapper
private static void ConfigureAutoMapper(IContainer container)
{
var configuration = container.TryGetInstance<IConfiguration>();
if (configuration == null) return;
//saying AutoMapper how to resolve services
configuration.ConstructServicesUsing(container.Get Instance);
foreach (var profile in container.GetAllInstances<Profile>())
{
configuration.AddProfile(profile);
}
}
#endregion
}